कमांड लाइन का उपयोग करके इंटरनेट कनेक्शन साझाकरण कैसे सक्षम करें?


35

मैं इसे नेटवर्क कनेक्शन पर राइट-क्लिक करके, साझाकरण टैब को खोलने और "अन्य नेटवर्क उपयोगकर्ताओं को इस कंप्यूटर के इंटरनेट कनेक्शन के माध्यम से कनेक्ट करने की अनुमति" चेक बॉक्स पर क्लिक करके कर सकता हूं।

अब मुझे इस कार्य को स्वचालित करने की आवश्यकता है। क्या इसे पूरा करने के लिए कमांड-लाइन टूल या पॉवर्सशेल cmdlet है?


4
अभी यह कोशिश नहीं कर सकता, लेकिन आप प्रोसेस मॉनीटर को चलाने और अपनी रजिस्ट्री पर इंगित करने का प्रयास कर सकते हैं । जब आप सेटिंग को टॉगल और लागू करते हैं, तो क्या कुंजी / मान बदलते हैं, उसके अनुसार अपनी स्क्रिप्ट लिखें।
इस्जि


Microsoft-Windows-SharedAccessपरोक्ष विंडोज सेटअप घटक इतने करीब है, लेकिन यह केवल Windows सेटअप में काम करता है! Technet.microsoft.com/en-us/library/ff715511.aspx
जैकब क्राल

जवाबों:


20

यहाँ एक शुद्ध PowerShell समाधान है (प्रशासनिक विशेषाधिकारों के साथ चलाया जाना चाहिए):

# Register the HNetCfg library (once)
regsvr32 hnetcfg.dll

# Create a NetSharingManager object
$m = New-Object -ComObject HNetCfg.HNetShare

# List connections
$m.EnumEveryConnection |% { $m.NetConnectionProps.Invoke($_) }

# Find connection
$c = $m.EnumEveryConnection |? { $m.NetConnectionProps.Invoke($_).Name -eq "Ethernet" }

# Get sharing configuration
$config = $m.INetSharingConfigurationForINetConnection.Invoke($c)

# See if sharing is enabled
Write-Output $config.SharingEnabled

# See the role of connection in sharing
# 0 - public, 1 - private
# Only meaningful if SharingEnabled is True
Write-Output $config.SharingType

# Enable sharing (0 - public, 1 - private)
$config.EnableSharing(0)

# Disable sharing
$config.DisableSharing()

इस प्रश्न को social.msdn.microsoft.com पर भी देखें :

आपको उस एडाप्टर पर सार्वजनिक इंटरफ़ेस को सक्षम करना होगा जिसे आप कनेक्ट कर रहे हैं और उस एडाप्टर के लिए निजी इंटरफ़ेस पर साझा करना सक्षम करें जिसे आप नेटवर्क के लिए उपयोग करने में सक्षम होना चाहते हैं।


1
ओह, मुझे नहीं पता था कि तुम PowerShell के साथ COM इंटरॉप कर सकते थे! मुझे लगता है कि आपको कुछ [System.Runtime.Interopservices.Marshal]::ReleaseComObject(...)छिड़कने की जरूरत है।
याकूब क्राल

EnableSharingइस अपवाद को फेंकने के लिए कॉल , भले ही मैं प्रशासक के रूप में PowerShell चला रहा हूं: अपवाद: "1" तर्क के साथ "EnableSharing" को अपवाद कहते हैं: "कोई ईवेंट किसी भी ग्राहक को आमंत्रित करने में असमर्थ था (HRESULT द्वारा अपवाद: 0x80040201) "-> एक आह्वान के लक्ष्य द्वारा अपवाद को फेंक दिया गया है। -> एक घटना किसी भी ग्राहक को आमंत्रित करने में असमर्थ थी (HRESULT से अपवाद: 0x80040201)
याकूब क्राल

regsvr32 hnetcfg.dllमैन्युअल रूप से व्यवस्थापक के रूप में चलाने का प्रयास करें ।
utapyngo

मुझे आश्चर्य है: "एडॉप्टर पर सार्वजनिक इंटरफ़ेस को सक्षम करने" का क्या मतलब है?
याकूब क्राल

2
Powershell के नए संस्करणों में, .SharingType अब है ।SharingConnectionType
Baodad

9

मैंने इसके लिए एक साधारण कमांड लाइन टूल बनाया है ।

  1. डाउनलोड और अनज़िप याgit clone git@github.com:utapyngo/icsmanager.git

  2. बनाकर चलाएं build.cmd

  3. HNetCfgCOM लाइब्रेरी पंजीकृत करें : regsvr32 hnetcfg.dll(यह एक मानक पुस्तकालय है %WINDIR%\System32)

कमांड-लाइन उपयोग

  1. व्यवस्थापक के रूप में कमांड लाइन प्रॉम्प्ट खोलें

    cdकरने के लिए icsmanagerनिर्देशिका (या icsmanager-masterयदि आप ज़िप डाउनलोड किया)।

  2. प्रकार icsmanager

    यह उपलब्ध नेटवर्क कनेक्शन प्रदर्शित करना चाहिए। GUID विशेषता पर ध्यान दें। इस उपकरण का उपयोग करने के लिए आपके पास कम से कम दो कनेक्शन होने चाहिए।

  3. प्रकार icsmanager enable {GUID-OF-CONNECTION-TO-SHARE} {GUID-OF-HOME-CONNECTION}

    यह आईसीएस को सक्षम करना चाहिए।

शक्तियों का उपयोग

  1. आयात मॉड्यूल:

    आयात-मॉड्यूल IcsManager.dll

  2. सूची नेटवर्क कनेक्शन:

    Get-NetworkConnections

  3. इंटरनेट कनेक्शन साझा करना प्रारंभ करें:

    "होम कनेक्शन" साझा करने के लिए ICS "कनेक्शन सक्षम करें"

  4. इंटरनेट कनेक्शन साझा करना बंद करें:

    अक्षम-आईसीएस


डिस्क्लेमर: मैंने अभी तक टूल का परीक्षण नहीं किया है। अपने जोखिम पर इसका इस्तेमाल करो। कुछ काम नहीं करने पर GitHub में एक मुद्दा खोलने के लिए स्वतंत्र महसूस करें। पुल अनुरोधों का भी स्वागत है।


साफ। यह एक बाहरी बाइनरी का उपयोग करता है जिसे NETCONLib कहा जाता है; यह कहां से आया? यह क्या करता है?
याकूब क्राल

अहा। यह विंडोज के साथ शामिल "नेटकॉन 1.0 टाइप लाइब्रेरी" के लिए एक COM क्लास रैपर है।
याकूब क्राल

@ जेकॉबक्रॉल, हां, यह स्थित है C:\Windows\System32\hnetcfg.dll
utapyngo

ऐसा लगता है कि यह वही करेगा जो मैं चाहता हूं - मैं इसे आज़माऊंगा।
याकूब क्राल

1
क्षमा करें, मैंने इसे कई महीने पहले किया था और यह भूल गया था कि HNetCfg को मैन्युअल रूप से पंजीकृत किया जाना चाहिए regsvr32 hnetcfg.dll। और मैंने msdn.microsoft.com/en-us/library/windows/desktop/…hnetcfg.dll
utapyngo

5

मेरी समझ से, विस्टा के बाद से रूटिंग क्षमता विंडोज से हटा दी गई थी और अब केवल विंडोज सर्वर में उपलब्ध है।

इंटरनेट पर निम्नलिखित ट्रिक को फिर से सक्षम करने के लिए पाया जा सकता है netsh routing, जिसे आप अपने जोखिम पर आजमा सकते हैं। मैं पहले सामान्य सावधानियों का सुझाव देता हूं, जिसमें सिस्टम पुनर्स्थापना बिंदु बनाना शामिल है।

  1. 2003 से या XP से IPMONTR.DLL और IPPROMON.DLL प्राप्त करें
  2. उन्हें WINDOWS \ SYSTEM32 में कॉपी करें
  3. प्रशासक के रूप में कमांड प्रॉम्प्ट (cmd) में चलाएं:

    netsh add helper ipmontr.dll
    netsh add helper ippromon.dll

आपको रूटिंग और रिमोट एक्सेस सर्विस को स्वचालित स्टार्टअप पर सेट करने की भी आवश्यकता हो सकती है।

कुछ भी करने से पहले रिबूट करें।


1
अगर मेरे पास XP लाइसेंस नहीं है, तो क्या XP से फ़ाइलों की नकल करना कानूनी है?
utapyngo

1
विंडोज 7 64 बिट पर इस की कोशिश की। XP 64 बिट से फ़ाइलों को कॉपी किया। व्यवस्थापक के रूप में चल रहा है। त्रुटियाँ:The following helper DLL cannot be loaded: IPMONTR.DLL. The following helper DLL cannot be loaded: IPPROMON.DLL.
utapyngo

1
मैंने इसे बहुत "हेल्पर जोड़ें" की कोशिश की और मुझे यह पुष्टि करने के लिए खेद है कि यह 64-बिट के लिए काम नहीं करता है। के रूप में आप दोनों OSs पर अधिकार dlls प्रत्यारोपण की वैधता के बारे में, यह स्पष्ट नहीं है। आपके पास विंडोज़ फ़ाइलों को संशोधित करने का अधिकार नहीं है, लेकिन उन्हें कॉपी करना शायद एक्सपी लाइसेंस में विरुद्ध नहीं है (यह मुझे चकित करेगा कि Microsoft इसे पहले से ही देख सकता है)।
harrymc

1
यह उत्तर में उल्लेख किया जाना चाहिए कि यह 64-बिट विंडोज के लिए काम नहीं करता है। कृपया यह भी उल्लेख करें कि फ़ाइलों को XP 32-बिट से कॉपी किया जाना चाहिए।
utapyngo

@utapyngo: कोई यह सुनिश्चित नहीं कर सकता है कि 64-बिट पर यह काम करने का कोई तरीका नहीं है। मेरे अध्ययन के अनुसार, समस्या यह है कि इन दोनों से अधिक dll की नकल की जानी चाहिए, लेकिन पूरी तरह से समस्या का विश्लेषण करने के लिए मुझे जितना समय देना चाहिए उतना अधिक समय की आवश्यकता होती है।
harrymc

2

मेरा एक पूर्व सहयोगी खिड़कियों के उपकरण netsh के माध्यम से ऐसा करता था। जैसा कि मैंने खुद कभी नहीं किया है, मैं microsoft netsh प्रलेखन पर एक नज़र डालने के लिए आपको सलाह दे सकता हूं

जैसा कि मुझे याद है कि यह एक बहुत छोटा और बहुत सारे नेट्स कॉल थे जहाँ ऐसा करने की ज़रूरत थी लेकिन यह अंत में काम आया ...


6
netsh routingविंडोज एक्सपी में ऐसा करना संभव था लेकिन विंडोज 7 में उन्होंने उस कमांड को हटा दिया। इसलिए मैं केवल विंडोज 7. के बारे में पूछ रहा हूं
utapyngo

2

निम्नलिखित काम करना चाहिए

netsh routing ip autodhcp install
netsh routing ip autodhcp set interface name="Local Area Connection(or whereever your internet connection is from)" mode=enable
netsh routing ip autodhcp set global 192.168.0.1 255.255.255.0 11520

8
netsh routingविंडोज एक्सपी में ऐसा करना संभव था लेकिन विंडोज 7 में उन्होंने उस कमांड को हटा दिया। इसलिए मैं केवल विंडोज 7 के बारे में पूछ रहा हूं
utapyngo

1

दुर्भाग्य से विंडोज 7 या अधिक के लिए ऐसी कोई cmd कमांड नहीं है, इसलिए मैंने इसे प्राप्त करने के लिए इस Visual Basic फ़ंक्शन का उपयोग किया:

Private Function EnableDisableICS(ByVal sPublicConnectionName As String, ByVal sPrivateConnectionName As String, ByVal bEnable As Boolean)  
    Dim bFound As Boolean
    Dim oNetSharingManager, oConnectionCollection, oItem, EveryConnection, objNCProps
    oNetSharingManager = CreateObject("HNetCfg.HNetShare.1")
    oConnectionCollection = oNetSharingManager.EnumEveryConnection
    For Each oItem In oConnectionCollection
        EveryConnection = oNetSharingManager.INetSharingConfigurationForINetConnection(oItem)
        objNCProps = oNetSharingManager.NetConnectionProps(oItem)
        If objNCProps.name = sPrivateConnectionName Then
            bFound = True
            MsgBox("Starting Internet Sharing For: " & objNCProps.name)
            If bEnable Then
                EveryConnection.EnableSharing(1)
            Else
                EveryConnection.DisableSharing()
            End If
        End If
    Next
    oConnectionCollection = oNetSharingManager.EnumEveryConnection
    For Each oItem In oConnectionCollection
        EveryConnection = oNetSharingManager.INetSharingConfigurationForINetConnection(oItem)
        objNCProps = oNetSharingManager.NetConnectionProps(oItem)
        If objNCProps.name = sPublicConnectionName Then
            bFound = True
            MsgBox("Internet Sharing Success For: " & objNCProps.name)
            If bEnable Then
                EveryConnection.EnableSharing(0)
            Else
                EveryConnection.DisableSharing()
            End If
        End If
    Next
    Return Nothing 'bEnable & bFound
End Function  

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    EnableDisableICS("YOUR ACTIVE NETWORK", "YOUR ADAPTOR TO SHARE", True)
End Sub

कृपया ध्यान दें कि "" "" आवश्यक है। मज़े करो।


1

जो मैंने पढ़ा है, उसके आधार पर, अगर पोस्ट करने वालों ने कहा netshहै कि 7 और उससे अधिक की शुरुआत में काम नहीं करता है , तो यह गलत है। अब अगर इसके बारे में कड़ाई से "netsh routing " के , तो मुझे लगता है कि आप सही हो सकते हैं, लेकिन यह काम करता है- मैं एक बैच फ़ाइल की सामग्री को दिखाने वाला हूं जो मैंने उस वर्कसन विंडोज 8.1 को बनाया है। सामान्य टिप्पणी और जानकारी के टुकड़े प्राप्त करने के बजाय, मैं पूरी जानकारी रखने वालों की मदद करने की कोशिश करने जा रहा हूं।

सबसे पहले, आपको यह सुनिश्चित करने की ज़रूरत है कि आपके द्वारा साझा किया जा रहा कनेक्शन वास्तव में कनेक्शन साझा करने के लिए सेट है। यह लिंक आपको उसके लिए जाना चाहिए:

http://windows.microsoft.com/en-us/windows/set-internet-connection-sharing#1TC=windows-7

  1. स्टार्ट बटन के स्टार्ट बटन पर क्लिक करके नेटवर्क कनेक्शन खोलें, और फिर कंट्रोल पैनल पर क्लिक करें। खोज बॉक्स में, एडाप्टर और फिर नेटवर्क और साझाकरण केंद्र के तहत, नेटवर्क कनेक्शन देखें पर क्लिक करें।

  2. उस कनेक्शन पर राइट-क्लिक करें जिसे आप साझा करना चाहते हैं, और फिर गुण क्लिक करें। प्रशासक की अनुमति आवश्यक है यदि आपको एक व्यवस्थापक पासवर्ड या पुष्टिकरण के लिए संकेत दिया जाता है, तो पासवर्ड टाइप करें या पुष्टि प्रदान करें।

  3. साझाकरण टैब पर क्लिक करें और फिर अन्य नेटवर्क उपयोगकर्ताओं को इस कंप्यूटर के इंटरनेट कनेक्शन चेक बॉक्स के माध्यम से कनेक्ट करने की अनुमति दें का चयन करें।

होस्ट कंप्यूटर पर ICS सेट करने के लिए ऊपर दिए गए चरणों का पालन करने के बाद, अन्य सभी कंप्यूटरों पर निम्न परिवर्तन करें (लेकिन होस्ट कंप्यूटर पर नहीं)।

  1. स्टार्ट बटन की स्टार्ट बटन पर क्लिक करके, कंट्रोल पैनल पर क्लिक करके, नेटवर्क और इंटरनेट पर क्लिक करके और फिर इंटरनेट विकल्प पर क्लिक करके इंटरनेट विकल्प खोलें।

  2. कनेक्शन टैब पर क्लिक करें और फिर कनेक्शन डायल न करें पर क्लिक करें।

  3. LAN सेटिंग्स पर क्लिक करें।

  4. स्थानीय क्षेत्र नेटवर्क (LAN) सेटिंग्स संवाद बॉक्स में, स्वचालित कॉन्फ़िगरेशन के तहत, स्वचालित रूप से सेटिंग का पता लगाएं और स्वचालित कॉन्फ़िगरेशन स्क्रिप्ट का उपयोग करें चेक बॉक्स साफ़ करें।

  5. प्रॉक्सी सर्वर के तहत, अपने LAN चेक बॉक्स के लिए प्रॉक्सी सर्वर का उपयोग करें को साफ़ करें, और उसके बाद ठीक पर क्लिक करें।

मेरी जानकारी के लिए, मुझे लगता है कि यह विंडोज 7 और 8 दोनों के लिए काम करना चाहिए।

अब चूंकि विषय कमांड लाइन समाधान के बारे में था, इसलिए यह बैच फ़ाइल की सामग्री है कि मुझे एक वर्चुअल वायरलेस एडेप्टर कैसे कॉन्फ़िगर किया गया है और जाने के लिए तैयार है।

एक बार यह बन जाने के बाद, आपको उपरोक्त निर्देशों का उपयोग करना पड़ सकता है और सुनिश्चित करें कि आप नए वायरलेस एडाप्टर के साथ स्रोत कनेक्शन साझा कर रहे हैं जो आपके वायरलेस उपकरणों द्वारा देखा जाएगा।

कनेक्शन साझा करना .bat फ़ाइल:

@echo off
set _my_datetime=%date%_%time%
set _my_datetime=%_my_datetime: =_%
set _my_datetime=%_my_datetime::=%
set _my_datetime=%_my_datetime:/=_%
set _my_datetime=%_my_datetime:.=_%

cd\
    if NOT EXIST "C:\TEMP\switch.txt" (
        GOTO :START
    ) ELSE (
        GOTO :STOP
    )

:START
REM Create Temp File for On and Off switch.
ECHO WOOHOO >"C:\TEMP\switch.txt"

REM -- Output everything that is happening into a file called wifi.txt.
REM -- Start out with a timestamp at the top to show when it was done.
REM -- All 'netsh' commands are for setting up the SSID and starting the    sharing.
REM -- I stop and start when starting the service just for prosperity.

echo _%_my_datetime% >"C:\TEMP\wifi.txt"
netsh wlan set hostednetwork mode=allow ssid=ITWORKS key=111222333 >>    "C:\TEMP\wifi.txt"
netsh wlan stop hostednetwork >>"C:\TEMP\wifi.txt"
netsh wlan start hostednetwork >>"C:\TEMP\wifi.txt"
echo MSGBOX "Wifi Sharing Started!" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q
GOTO :END


REM -- This will turn ICS off and give a prompt via VBS that you're turned off.
REM -- I timestamp when the service is turned off in the output file.
REM -- I delete the switch file to let the code know to turn it on when
REM -- when fired off again.  Tempmessage is the msgbox used to show the service
REM -- has been turned off.  Same for the msgbox above when it's on.

:STOP
echo OFF AT _%_my_datetime% >>"C:\TEMP\wifi.txt"
netsh wlan stop hostednetwork >>"C:\TEMP\wifi.txt"
DEL /Q "C:\TEMP\switch.txt"
echo MSGBOX "Wifi Sharing Stopped!" > %temp%\TEMPmessage.vbs
call %temp%\TEMPmessage.vbs
del %temp%\TEMPmessage.vbs /f /q

:END

मुझे इस बारे में सवालों के जवाब देने में अधिक खुशी होगी क्योंकि कुछ अनोखी स्थितियाँ होने वाली हैं और मैं मदद करना चाहूंगा क्योंकि मुझे एक साथ एक टुकड़ा देना था जो मैंने ऊपर पाया।

लेकिन इसे परिप्रेक्ष्य में लाने के लिए, यह विंडोज 8.1 पर काम करता है एक ईथरनेट कनेक्शन का उपयोग करके लैपटॉप में वर्चुअल एडेप्टर से अपना कनेक्शन साझा करता है। यदि आप किसी स्रोत वायरलेस कनेक्शन को साझा करने का प्रयास कर रहे हैं तो यह भी काम कर सकता है।


सुपर उपयोगकर्ता में आपका स्वागत है! विस्तृत उत्तर के लिए धन्यवाद, मैंने आपके प्रश्न को कुछ पाठ को सुव्यवस्थित करने के लिए और अपनी बैट फ़ाइल सामग्री को एक कोड ब्लॉक में डालने के लिए संपादित किया है। यदि आपको इसमें कोई समस्या है, तो आप अन्य प्रारूपण निर्देश देख सकते हैं- कृपया सुनिश्चित करें कि मैंने कोड का अर्थ नहीं बदला है।
बर्टिएब

हाँ यह ठीक है और धन्यवाद। मुझे पता था कि मुझे फॉर्मेटिंग पर बेहतर काम करना चाहिए था। वास्तव में वहाँ जाने से रोकने के लिए एमएस लिंक पर अच्छा स्पर्श।
user2562950

इसके बारे में चिंता न करें, आप मार्कडाउन सिंटैक्स को जल्दी से उठा लेंगे :) लिंक सामग्री शामिल करना यहां सवालों के जवाब देने पर एक नीति का हिस्सा है - लिंक बासी जा सकते हैं, बदल सकते हैं या गायब हो सकते हैं। यह Microsoft के मामले में कम संभावना है, लेकिन अभी भी बहुत संभव है। उत्तर में ही समाधान के लिए आवश्यक सब कुछ डाल देना अच्छा अभ्यास है। आप से अधिक अच्छे जवाब देखने के लिए तत्पर हैं!
bertieb
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.