Bagaimana cara mengaktifkan Berbagi Sambungan Internet menggunakan baris perintah?


35

Saya dapat melakukannya secara manual dengan mengklik kanan pada koneksi jaringan, membuka tab Berbagi dan mengklik pada kotak centang "Izinkan pengguna jaringan lain untuk terhubung melalui koneksi Internet komputer ini".

Sekarang saya perlu mengotomatiskan tugas ini. Apakah ada alat baris perintah atau cmdlet Powershell untuk mencapai ini?


4
Tidak dapat mencoba ini sekarang, tetapi Anda mungkin ingin mencoba menjalankan Monitor Proses dan mengarahkannya ke Registry Anda. Lihat apa kunci / nilai berubah ketika Anda beralih & menerapkan pengaturan, kemudian tulis skrip Anda sesuai.
Iszi

Pertanyaan / info terkait di StackOverflow: Aktifkan Berbagi Sambungan Internet secara terprogram
Ƭᴇcʜιᴇ007

The Microsoft-Windows-SharedAccesstanpa pengawasan komponen Windows Setup begitu dekat, tetapi hanya bekerja di Windows Setup! technet.microsoft.com/en-us/library/ff715511.aspx
Jacob Krall

Jawaban:


20

Ini adalah solusi PowerShell murni (harus dijalankan dengan hak administratif):

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

Lihat juga pertanyaan ini di social.msdn.microsoft.com :

Anda harus mengaktifkan antarmuka publik pada adaptor yang Anda sambungkan dan memungkinkan berbagi pada antarmuka pribadi untuk adaptor yang ingin Anda gunakan untuk jaringan.


1
Ooh, saya tidak tahu Anda bisa melakukan COM interop dengan PowerShell! Saya berasumsi Anda perlu [System.Runtime.Interopservices.Marshal]::ReleaseComObject(...)ditaburi.
Jacob Krall

Panggilan untuk EnableSharingmelempar pengecualian ini, meskipun saya menjalankan PowerShell sebagai Administrator: Pengecualian: Pengecualian memanggil "EnableSharing" dengan argumen "1": "Suatu peristiwa tidak dapat memanggil salah satu pelanggan (Pengecualian dari HRESULT: 0x80040201) "-> Pengecualian telah dilemparkan oleh target doa. -> Suatu peristiwa tidak dapat meminta pelanggan mana pun (Pengecualian dari HRESULT: 0x80040201)
Jacob Krall

Coba jalankan regsvr32 hnetcfg.dllsebagai administrator secara manual.
utapyngo

Saya bertanya-tanya: apa artinya "mengaktifkan antarmuka publik pada adaptor"?
Jacob Krall

2
Dalam versi yang lebih baru dari Powershell, .SharingType sekarang .SharingConnectionType
Baodad

9

Saya telah membuat alat baris perintah sederhana untuk ini.

  1. Unduh dan unzip ataugit clone git@github.com:utapyngo/icsmanager.git

  2. Bangun dengan berlari build.cmd

  3. Daftarkan HNetCfgperpustakaan COM: regsvr32 hnetcfg.dll(itu adalah perpustakaan standar yang terletak di %WINDIR%\System32)

Penggunaan baris perintah

  1. Buka prompt baris perintah sebagai administrator

    cdke icsmanagerdirektori (atau icsmanager-masterjika Anda mengunduh zip).

  2. Mengetik icsmanager

    Ini akan menampilkan koneksi jaringan yang tersedia. Perhatikan atribut GUID. Untuk menggunakan alat ini, Anda harus memiliki setidaknya dua koneksi.

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

    Ini harus mengaktifkan ICS.

Penggunaan Powershell

  1. Modul impor:

    Impor-Modul IcsManager.dll

  2. Daftar koneksi jaringan:

    Dapatkan-NetworkConnections

  3. Mulai Berbagi Koneksi Internet:

    Aktifkan-ICS "Koneksi untuk berbagi" "Koneksi rumah"

  4. Hentikan Berbagi Koneksi Internet:

    Nonaktifkan-ICS


Penafian: Saya belum menguji alat ini. Gunakan dengan risiko Anda sendiri. Jangan ragu untuk membuka masalah di GitHub jika sesuatu tidak berfungsi. Permintaan penarikan juga diterima.


Rapi. Ini menggunakan biner eksternal yang disebut NETCONLib; dari mana asalnya? Apa fungsinya?
Jacob Krall

Aha. Ini adalah pembungkus kelas COM untuk "NetCon 1.0 Type Library" yang disertakan dengan Windows.
Jacob Krall

@ Jacobrall, ya, itu terletak di C:\Windows\System32\hnetcfg.dll.
utapyngo

Sepertinya ini akan melakukan apa yang saya inginkan - saya akan mencobanya.
Jacob Krall

1
Maaf, saya melakukannya beberapa bulan yang lalu dan lupa bahwa HNetCfg harus didaftarkan secara manual regsvr32 hnetcfg.dll. Dan saya belajar tentang hnetcfg.dlldi msdn.microsoft.com/en-us/library/windows/desktop/…
utapyngo

5

Menurut pemahaman saya, kemampuan perutean telah dihapus dari Windows sejak Vista dan hanya tersedia sekarang di Windows Server.

Trik berikut dapat ditemukan di Internet untuk mengaktifkan kembali netsh routing, yang dapat Anda coba dengan risiko Anda sendiri. Saya sarankan terlebih dahulu tindakan pencegahan biasa, termasuk membuat titik pemulihan sistem.

  1. Dapatkan IPMONTR.DLL dan IPPROMON.DLL dari 2003 atau dari XP
  2. Salin ke WINDOWS \ SYSTEM32
  3. Jalankan di Command Prompt (cmd) sebagai administrator:

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

Anda mungkin juga perlu mengatur Layanan Routing dan Akses Jarak Jauh ke startup Otomatis.

Nyalakan ulang sebelum mencoba sesuatu.


1
Apakah sah untuk menyalin file dari XP jika saya tidak memiliki lisensi XP?
utapyngo

1
Mencoba ini pada Windows 7 64bit. Menyalin file dari XP 64 bit. Berjalan sebagai administrator. Kesalahan:The following helper DLL cannot be loaded: IPMONTR.DLL. The following helper DLL cannot be loaded: IPPROMON.DLL.
utapyngo

1
Saya mencobanya juga "add helper" dan saya minta maaf untuk mengkonfirmasi bahwa itu tidak bekerja untuk 64-bit. Mengenai legalitas transplantasi dll yang Anda miliki di kedua OS, ini tidak jelas. Anda tidak memiliki hak untuk memodifikasi file Windows, tetapi menyalinnya mungkin tidak dikesampingkan dalam lisensi XP (akan mengejutkan saya bahwa Microsoft dapat memperkirakan ini sebelumnya).
harrymc

1
Itu harus disebutkan dalam jawaban bahwa itu tidak bekerja untuk Windows 64-bit. Harap sebutkan juga bahwa file harus disalin dari XP 32-bit.
utapyngo

@utapyngo: Seseorang tidak dapat memastikan bahwa memang tidak ada cara untuk membuat ini bekerja pada 64-bit. Menurut penelitian saya, masalahnya adalah bahwa lebih banyak dll daripada keduanya harus disalin, tetapi menganalisis sepenuhnya masalah membutuhkan lebih banyak waktu daripada yang bisa saya berikan.
harrymc

2

Seorang mantan kolega saya biasa melakukan ini melalui alat netsh windows sendiri. Karena saya belum pernah melakukan ini sendiri, saya sendiri dapat menyarankan Anda untuk melihat dokumentasi microsoft netsh .

Seperti yang saya ingat itu cukup banyak dan banyak panggilan netsh di mana diperlukan untuk melakukannya tetapi itu bekerja pada akhirnya ...


6
Itu mungkin dilakukan netsh routingdi Windows XP tetapi pada Windows 7 mereka telah menghapus perintah itu. Itu sebabnya saya hanya bertanya tentang Windows 7.
utapyngo

2

Berikut ini harus bekerja

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
Itu mungkin dilakukan netsh routingdi Windows XP tetapi pada Windows 7 mereka telah menghapus perintah itu. Itu sebabnya saya hanya bertanya tentang Windows 7.
utapyngo

1

Sayangnya tidak ada perintah cmd untuk Windows 7 atau lebih, jadi saya menggunakan fungsi Visual Basic ini untuk menyelesaikannya:

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

Harap perhatikan bahwa "" "" wajib diisi. Selamat bersenang-senang.


1

Berdasarkan apa yang saya baca, jika yang telah diposting mengatakan netshtidak berfungsi mulai dari 7 dan ke atas - itu tidak benar. Sekarang jika ini benar-benar tentang " netsh routing", saya kira Anda mungkin benar, tetapi ini berhasil - saya akan menunjukkan konten file batch yang saya buat yang berfungsi pada Windows 8.1. Alih-alih mendapatkan komentar dan potongan informasi yang biasa, saya akan mencoba dan membantu mereka yang memiliki informasi lengkap.

Pertama, Anda perlu memastikan koneksi yang akan Anda bagikan diatur untuk benar-benar berbagi koneksi. Tautan ini di sini akan membantu Anda untuk itu:

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

  1. Buka Sambungan Jaringan dengan mengklik tombol Mulai Gambar tombol Mulai, lalu mengklik Panel Kontrol. Di kotak pencarian, ketik adaptor, lalu di bawah Jaringan dan Pusat Berbagi, klik Lihat koneksi jaringan.

  2. Klik kanan koneksi yang ingin Anda bagikan, dan kemudian klik Properti. Izin administrator diperlukan Jika Anda dimintai kata sandi atau konfirmasi administrator, ketikkan kata sandi atau berikan konfirmasi.

  3. Klik tab Berbagi, lalu pilih kotak centang Perbolehkan pengguna jaringan lain untuk terhubung melalui koneksi Internet komputer ini.

Setelah Anda mengikuti langkah-langkah di atas untuk mengatur ICS pada komputer host, buat perubahan berikut pada semua komputer lain (tetapi tidak pada komputer host).

  1. Buka Opsi Internet dengan mengklik tombol Mulai Gambar tombol Mulai, mengklik Panel Kontrol, mengklik Jaringan dan Internet, lalu mengklik Opsi Internet.

  2. Klik tab Connections, dan kemudian klik Never dial a connection.

  3. Klik Pengaturan LAN.

  4. Di kotak dialog Pengaturan Jaringan Area Lokal (LAN), Di bawah Konfigurasi otomatis, kosongkan pengaturan Deteksi otomatis dan Gunakan kotak centang skrip konfigurasi otomatis.

  5. Di bawah Server proxy, kosongkan kotak centang Gunakan server proxy untuk LAN Anda, lalu klik OK.

Sepengetahuan saya, saya pikir ini harus bekerja untuk Windows 7 dan 8.

Sekarang karena topiknya adalah tentang solusi baris perintah, ini adalah konten file batch tentang cara saya mengonfigurasi adaptor nirkabel virtual dan siap digunakan.

Setelah dibuat, Anda mungkin harus menggunakan petunjuk di atas dan memastikan Anda berbagi koneksi sumber dengan adaptor virtual yang baru dibuat yang akan dilihat oleh perangkat nirkabel Anda.

File .bat berbagi koneksi:

@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

Saya akan dengan senang hati menjawab pertanyaan tentang ini karena akan ada beberapa situasi unik dan saya ingin membantu karena saya harus mengumpulkan apa yang saya temukan di atas.

Tetapi untuk membawa ini ke perspektif, ini bekerja pada Windows 8.1 menggunakan koneksi Ethernet ke laptop berbagi koneksi ke adaptor virtual. Mungkin juga berfungsi baik jika Anda mencoba berbagi sumber koneksi nirkabel.


Selamat Datang di Pengguna Super! Terima kasih atas jawaban terinci, saya telah mengedit pertanyaan Anda untuk merampingkan beberapa teks dan untuk meletakkan konten file bat Anda dalam blok kode. Anda dapat melihat instruksi pemformatan lain jika ada masalah dengan itu- silakan periksa untuk memastikan saya belum mengubah arti kode.
bertieb

Ya itu baik dan terima kasih. Saya tahu saya seharusnya melakukan pekerjaan yang lebih baik pada pemformatan. Sentuhan yang bagus pada tautan MS untuk mencegah dari harus benar-benar pergi ke sana.
user2562950

Jangan khawatir, Anda akan mengambil sintaks penurunan harga dengan cukup cepat :) Termasuk konten tautan adalah bagian dari kebijakan menjawab pertanyaan - tautan bisa basi, berubah, atau hilang. Ini kurang mungkin dalam kasus Microsoft, tetapi masih sangat mungkin. Adalah praktik yang baik untuk meletakkan segala yang diperlukan untuk solusi dalam jawaban itu sendiri. Nantikan jawaban yang lebih baik dari Anda!
bertieb
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.