Komut satırını kullanarak Internet Bağlantı Paylaşımı nasıl etkinleştirilir?


35

Bir ağ bağlantısına sağ tıklayarak, Paylaşım sekmesini açarak ve "Diğer ağ kullanıcılarının bu bilgisayarın İnternet bağlantısı üzerinden bağlanmasına izin ver" onay kutusunu tıklatarak el ile yapabilirim.

Şimdi bu görevi otomatikleştirmem gerekiyor. Bunu gerçekleştirmek için bir komut satırı aracı veya Powershell cmdlet'i var mı?


4
Bunu şimdi deneyemiyorum, ancak İşlem İzleyicisi'ni çalıştırmayı ve Kayıt Defteri'nde işaretlemeyi denemek isteyebilirsiniz . Ayarı değiştirip uyguladığınızda hangi tuşların / değerlerin değiştiğini görün, ardından komut dosyanızı uygun şekilde yazın.
Iszi 17:12


Microsoft-Windows-SharedAccessKatılımsız Windows Kurulumu bileşeni çok yakın, ancak yalnızca Windows Kur çalışıyor! technet.microsoft.com/en-us/library/ff715511.aspx
Jacob Krall

Yanıtlar:


20

İşte saf bir PowerShell çözümü (idari ayrıcalıklarla çalıştırılmalıdır):

# 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()

Bu soruyu social.msdn.microsoft.com adresinde de görebilirsiniz :

Bağlanmak istediğiniz bağdaştırıcıda ortak arayüzü etkinleştirmeniz ve ağda kullanabilmek istediğiniz bağdaştırıcı için özel arabirimde paylaşmayı etkinleştirmeniz gerekir.


1
Ooh, senin PowerShell ile birlikte çalışabileceğini bilmiyordum! Sanırım biraz [System.Runtime.Interopservices.Marshal]::ReleaseComObject(...)serpilirsiniz.
Jacob Krall

Çağrı için EnableSharingİstisna: Ben yönetici olarak PowerShell koşuyorum rağmen bu istisna atıyor "EnableSharing" çağıran İstisna ile "1" argüman (lar): "Bir olay HRESULT abonelerin herhangi (İstisna çağırmak açamadı: 0x80040201) "-> İstisna bir istila hedefi tarafından atıldı. -> Bir etkinlik, abonelerden herhangi birini çağıramadı (HRESULT İstisnası: 0x80040201)
Jacob Krall 23:13

regsvr32 hnetcfg.dllManuel olarak yönetici olarak çalıştırmayı deneyin .
utapyngo

Merak ediyorum: "Bağdaştırıcıdaki ortak arayüzü etkinleştir" ne demek?
Jacob Krall

2
Powershell’in yeni sürümlerinde
.SharingType

9

Bunun için basit bir komut satırı aracı yarattım .

  1. İndirin ve açın veyagit clone git@github.com:utapyngo/icsmanager.git

  2. Çalıştırarak oluştur build.cmd

  3. Kayıt HNetCfgCOM kitaplığı: regsvr32 hnetcfg.dll(standart bir kütüphane bulunmaktadır %WINDIR%\System32)

Komut satırı kullanımı

  1. Komut satırı istemini yönetici olarak açın.

    cdiçin icsmanagerdizine (veya icsmanager-mastersize zip indirilmiş ise).

  2. tip icsmanager

    Bu mevcut ağ bağlantılarını göstermelidir. GUID özniteliğine dikkat edin. Bu aracı kullanmak için en az iki bağlantıya sahip olmanız gerekir.

  3. tip icsmanager enable {GUID-OF-CONNECTION-TO-SHARE} {GUID-OF-HOME-CONNECTION}

    Bu, ICS'yi etkinleştirmelidir.

Powershell kullanımı

  1. İthalat modülü:

    Alma Modülü IcsManager.dll

  2. Ağ bağlantılarını listele:

    -NetworkConnections alın

  3. İnternet Bağlantı Paylaşımı Başlat:

    Enable-ICS "Paylaşım bağlantısı" "Ev bağlantısı"

  4. İnternet Bağlantı Paylaşımını Durdurun:

    Devre Dışı-ICS


Yasal Uyarı: Aracı henüz test etmedim. Kullan kendi sorumluluğunuzdadır. Bir şey işe yaramazsa GitHub'da bir sorun açmaktan çekinmeyin. Çekme istekleri de kabul edilir.


Temiz. Bu NETCONLib adlı bir dış ikili kullanır; nereden geldi? Bu ne işe yarıyor?
Jacob Krall

Aha. Bu, Windows'ta bulunan "NetCon 1.0 Tür Kitaplığı" için COM sınıfı bir sarıcıdır.
Jacob Krall

@ JacobKrall, evet, bulunduğu yer C:\Windows\System32\hnetcfg.dll.
utapyngo

Bu tam olarak istediğimi yapacak gibi görünüyor - Ben deneyeceğim.
Jacob Krall

1
Üzgünüm, birkaç ay önce yaptım ve HNetCfg'nin elle kaydedilmesi gerektiğini unuttum regsvr32 hnetcfg.dll. Ve öğrendim hnetcfg.dllde msdn.microsoft.com/en-us/library/windows/desktop/...
utapyngo

5

Anladığım kadarıyla, Windows’tan yönlendirme yeteneği Windows’tan kaldırıldı ve şu anda yalnızca Windows Server’da mevcut

Yeniden etkinleştirmek için İnternet'te netsh routing, kendi sorumluluğunuzda olduğunu deneyebileceğiniz aşağıdaki numara bulunabilir . Öncelikle bir sistem geri yükleme noktası oluşturmak da dahil olmak üzere genel önlemleri öneriyorum.

  1. IPMONTR.DLL ve IPPROMON.DLL dosyalarını 2003'ten veya XP'den alın
  2. Bunları WINDOWS \ SYSTEM32'ye kopyalayın
  3. Komut İstemi'nde (cmd) yönetici olarak çalıştırın:

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

Ayrıca Yönlendirme ve Uzaktan Erişim Hizmetini Otomatik başlangıç ​​olarak ayarlamanız gerekebilir.

Bir şey denemeden önce yeniden başlatın.


1
XP lisansım yoksa, dosyaları XP'den kopyalamak yasal mıdır?
utapyngo

1
Bunu Windows 7 64bit'te denedim. Dosyaları XP 64 bit'ten kopyaladım. Yönetici olarak çalışıyor. Hatalar:The following helper DLL cannot be loaded: IPMONTR.DLL. The following helper DLL cannot be loaded: IPPROMON.DLL.
utapyngo

1
Ben de "yardımcı ekle" denedim ve 64-bit için çalışmadığını onaylamak için özür dilerim. Her iki işletim sisteminde de hakkınız olan nakliyat harçlarının yasallığı ile ilgili olarak, bu belirsizdir. Windows dosyalarını değiştirme hakkınız yoktur, ancak dosyalarının kopyalanması XP lisansına tabi tutulmayabilir (Microsoft'un bunu önceden öngörmüş olması beni şaşırttı).
harrymc 24

1
64-bit Windows için işe yaramadığı cevabında belirtilmelidir. Lütfen dosyaların XP 32-bit'den kopyalanması gerektiğini de belirtin.
utapyngo

@ utapyngo: Bu işi 64 bit yapmak için gerçekten bir yol bulunmadığından emin olunamıyor. Çalışmalarıma göre sorun, bu ikisinden daha fazla ödevin kopyalanması gerektiği, ancak sorunu tamamen analiz etmek, verebileceğimden daha fazla zaman gerektiriyor.
harrymc 25:13

2

Eski bir meslektaşım bunu pencerelerin kendi aracı netsh aracılığıyla yapardı. Bunu asla kendim yapmadığım için, microsoft netsh belgelerine bir göz atmanızı önerebilirim .

Hatırlayabildiğim gibi, bunun için bir çukurluk ve çok sayıda netsh çağrısı yapıldı, fakat sonunda işe yaradı.


6
netsh routingWindows XP'de yapmak mümkündü, ancak Windows 7'de bu komutu kaldırdılar. Bu yüzden sadece Windows 7 hakkında soruyorum.
utapyngo

2

Aşağıdaki çalışması gerekir

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 routingWindows XP'de yapmak mümkündü, ancak Windows 7'de bu komutu kaldırdılar. Bu yüzden sadece Windows 7 hakkında soruyorum.
utapyngo

1

Ne yazık ki, Windows 7 veya daha fazlası için böyle bir cmd komutu yoktur, bu yüzden bunu yapmak için bu Visual Basic işlevini kullandım:

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

Lütfen "" "" gerekli olduğunu unutmayın. İyi eğlenceler.


1

Ne okuduğuma bağlı olarak, eğer gönderilenler netsh7'den başlayarak işe yaramazsa, bu yanlış. Şimdi kesinlikle " netsh routing" hakkında ise, sanırım haklı olabilirsiniz, ama bu işe yarıyor - Bu Windows 8'de çalışan bir toplu iş dosyasının içeriğini göstermek üzereyim. Olağan yorumları ve bilgi parçalarını almak yerine, tüm bilgileri içerenlere yardım etmeye çalışacağım.

Öncelikle, paylaşacağınız bağlantının gerçekten bağlantıyı paylaşacak şekilde ayarlandığından emin olmanız gerekir. Buradaki link size bunun için gitmeli:

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

  1. Başlat düğmesi Başlat düğmesinin resmi ve ardından Denetim Masası'nı tıklatarak Ağ Bağlantıları'nı açın. Arama kutusuna bağdaştırıcı yazın ve ardından Ağ ve Paylaşım Merkezi altında Ağ bağlantılarını görüntüle'yi tıklatın.

  2. Paylaşmak istediğiniz bağlantıyı sağ tıklatın ve ardından Özellikler'i tıklatın. Yönetici izni gerekli Yönetici şifresi veya onay istenirse, şifreyi yazın veya onay verin.

  3. Paylaşım sekmesini tıklatın ve ardından Diğer ağ kullanıcılarının bu bilgisayarın İnternet bağlantısı üzerinden bağlanmasına izin ver onay kutusunu seçin.

Ana bilgisayarda ICS'yi ayarlamak için yukarıdaki adımları uyguladıktan sonra, diğer tüm bilgisayarlarda (ancak ana bilgisayarda değil) aşağıdaki değişiklikleri yapın.

  1. Başlat düğmesi Başlat düğmesinin resmi, Denetim Masası, Ağ ve İnternet ve ardından İnternet Seçenekleri'ni tıklatarak Internet Seçenekleri'ni açın.

  2. Bağlantılar sekmesini ve ardından Bir bağlantıyı asla çevirme'yi tıklatın.

  3. LAN Ayarları'nı tıklayın.

  4. Yerel Alan Ağı (LAN) Ayarları iletişim kutusunda, Otomatik yapılandırma altında, Ayarları otomatik olarak algıla ve Otomatik yapılandırma komut dosyası kullan onay kutularının işaretini kaldırın.

  5. Proxy sunucusu altında, LAN'ınız için bir proxy sunucusu kullan onay kutusunun işaretini kaldırın ve ardından Tamam'ı tıklatın.

Bildiğim kadarıyla, bunun hem Windows 7 hem de 8 için çalışması gerektiğini düşünüyorum.

Şimdi konu bir komut satırı çözümüyle ilgili olduğundan, bu, yapılandırılmış ve kullanıma hazır bir sanal kablosuz bağdaştırıcısını nasıl elde ettiğimin toplu iş dosyası içeriğidir.

Oluşturulduktan sonra, yukarıdaki talimatları kullanmanız ve kaynak bağlantıyı kablosuz cihazlarınız tarafından görülecek yeni oluşturulan sanal adaptörle paylaştığınızdan emin olmanız gerekebilir.

Bağlantı paylaşımı .bat dosyası:

@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

Bununla ilgili soruları cevaplamaktan çok mutlu olacağım çünkü bazı benzersiz durumlar olacak ve yukarıda bulduğum şeyi bir araya getirdiğim için yardım etmek istiyorum.

Ancak bunu perspektife getirmek için, Windows 8.1'de, sanal adaptörle bağlantısını paylaşan bir dizüstü bilgisayara Ethernet bağlantısı kullanarak çalışır. Kaynak bir kablosuz bağlantıyı paylaşmaya çalışıyorsanız, işe yarayabilir.


Süper Kullanıcıya Hoşgeldiniz! Ayrıntılı cevap için teşekkürler, metnin bir kısmını kolaylaştırmak ve yarasa dosya içeriğinizi bir kod bloğuna koymak için sorunuzu düzenledik. Bununla ilgili herhangi bir sorun varsa diğer biçimlendirme talimatlarını görebilirsiniz - lütfen kodun anlamını değiştirmediğimden emin olun.
bertieb

Evet bu iyi ve teşekkürler. Biçimlendirme konusunda daha iyi bir iş yapmam gerektiğini biliyordum. MS bağlantısına dokunmak, aslında oraya gitmek zorunda kalmamak için hoş bir dokunuş.
user2562950

Endişelenmeyin, markdown sözdizimini yeterince hızlı bir şekilde alırsınız :) Bağlantı içeriğini eklemek, soruları yanıtlamaya yönelik bir politikanın bir parçasıdır - bağlantılar bayatlayabilir, değişebilir veya kaybolabilir. Bu Microsoft'ta daha az olasıdır, ancak yine de çok mümkündür. Bir çözüm için gerekli her şeyi cevabın içine koymak iyi bir uygulamadır. Sizden daha iyi cevaplar görmek için sabırsızlanıyoruz!
bertieb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.