Как включить общий доступ к подключению к Интернету с помощью командной строки?

Я могу сделать это вручную, щелкнув правой кнопкой мыши сетевое соединение, открыв вкладку "Общий доступ" и установив флажок "Разрешить другим пользователям сети подключаться через интернет-соединение на этом компьютере".

Теперь мне нужно автоматизировать эту задачу. Для этого есть инструмент командной строки или командлет Powershell?

8 ответов

Вот чистое решение 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. Скачать и распаковать или git clone git@github.com:utapyngo/icsmanager.git

  2. Построить, запустив build.cmd

  3. Зарегистрировать HNetCfg COM библиотека: regsvr32 hnetcfg.dll (это стандартная библиотека, расположенная по адресу %WINDIR%\System32 )

Использование командной строки

  1. Откройте командную строку как администратор

    cd к icsmanager каталог (или icsmanager-master если вы скачали zip).

  2. Тип icsmanager

    Это должно отобразить доступные сетевые подключения. Обратите внимание на атрибут GUID. Чтобы использовать этот инструмент, вам нужно иметь как минимум два соединения.

  3. Тип icsmanager enable {GUID-OF-CONNECTION-TO-SHARE} {GUID-OF-HOME-CONNECTION}

    Это должно включить ICS.

Использование Powershell

  1. Модуль импорта:

    Модуль импорта IcsManager.dll

  2. Список сетевых подключений:

    Get-NetworkConnections

  3. Запустите общий доступ к подключению к Интернету:

    Enable-ICS "Соединение с общим доступом" "Домашнее соединение"

  4. Остановить общий доступ к подключению к Интернету:

    Отключить-ICS


Отказ от ответственности: я еще не тестировал инструмент. Используйте его на свой страх и риск. Не стесняйтесь открывать вопрос на GitHub, если что-то не работает. Тяговые запросы также приветствуются.

By my understanding, routing capability was removed from Windows since Vista and is only available now in Windows Server.

The following trick can be found on the Internet to re-enable netsh routing , which you can try at your own risk. I suggest first the usual precautions, including creating a system restore point.

  1. Get IPMONTR.DLL and IPPROMON.DLL from 2003 or from XP
  2. Copy them to WINDOWS\SYSTEM32
  3. Run in Command Prompt (cmd) as administrator :

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

You might also need to set the Routing and Remote Access Service to Automatic startup.

Reboot before trying anything.

Вот еще одна утилита командной строки PowerShell в виде модуля PowerShell. Я написал его частично на основе кода из этой темы, протестировал и использовал его на компьютере с Windows 10. Он содержит три простые функции для управления ICS и работает с PowerShell версии 3.0 и выше.

Установка:

Загрузите файл модуля PowerShell (.psm1) и скопируйте его в свой PSModulePath (обычноC:\Users\%USERNAME%\Documents\WindowsPowerShell\Modules\<Module Folder>\<Module Files>. Назовите<Module Folder>точно так же, как файл .psm1 (в данном случае PSInternetConnectionSharing), и PowerShell автоматически найдет модуль и его функции. Все функции должны запускаться от имени администратора.

Примеры использования:

Set-Ics Совместно использует подключение к Интернету одного сетевого подключения (называемого общедоступным подключением) с другим сетевым подключением (называемым частным подключением).

      Set-Ics -PublicConnectionName Ethernet -PrivateConnectionName 'VM Host-Only Network'

Set-Ics Ethernet 'VM Host-Only Network'

Get-Ics отображает состояние ICS для всех сетевых подключений или, при необходимости, для указанных подключений.

Получить статус всех сетевых подключений:

      Get-Ics

Получить статус указанных сетевых подключений:

      Get-Ics -ConnectionNames Ethernet, Ethernet2, 'VM Host-Only Network'

Get-Ics Ethernet, Ethernet2, 'VM Host-Only Network'

Disable-Ics

Отключает ICS для всех сетевых подключений:

      Disable-Ics

Следующее должно работать

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

Бывший мой коллега делал это через собственный инструмент Windows netsh. Поскольку я никогда не делал этого сам, я могу порекомендовать вам взглянуть на документацию по Microsoft netsh.

Насколько я помню, это было довольно жалко и много netsh-вызовов, где это было необходимо, но в итоге это сработало...

К сожалению, нет такой команды cmd для Windows 7 или более, поэтому я использовал эту функцию 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

Обратите внимание, что """" обязательно. Повеселись.

Исходя из того, что я прочитал, если те, которые опубликовали, сказали netsh не работает, начиная с 7 и выше - это неправильно. Теперь если строгоnetsh routing"Я думаю, вы могли бы быть правы, но это работает - я собираюсь показать содержимое созданного мной пакетного файла, который работает на Windows 8.1. Вместо того, чтобы получать обычные комментарии и фрагменты информации, я собираюсь попробовать и помогите тем, у кого полная информация.

Во-первых, вы должны убедиться, что соединение, которым вы будете делиться, настроено на фактическое использование соединения. Эта ссылка должна помочь вам в этом:

http://windows.microsoft.com/en-us/windows/set-internet-connection-sharing

  1. Откройте "Сетевые подключения", нажав кнопку "Пуск" Изображение кнопки "Пуск", а затем нажмите "Панель управления". В поле поиска введите адаптер, а затем в разделе Центр управления сетями и общим доступом щелкните Просмотр сетевых подключений.

  2. Щелкните правой кнопкой мыши соединение, которым вы хотите поделиться, и выберите Свойства. Требуется разрешение администратора. Если вас попросят ввести пароль администратора или подтверждение, введите пароль или предоставьте подтверждение.

  3. Перейдите на вкладку "Общий доступ" и установите флажок "Разрешить другим пользователям сети подключаться через этот компьютер к интернет-соединению".

После того, как вы выполнили шаги, описанные выше, чтобы настроить ICS на хост-компьютере, внесите следующие изменения на всех других компьютерах (но не на хост-компьютере).

  1. Откройте "Свойства обозревателя", нажав кнопку "Пуск" Изображение кнопки "Пуск", выберите "Панель управления", "Сеть и Интернет", а затем нажмите "Свойства обозревателя".

  2. Перейдите на вкладку "Подключения" и нажмите "Никогда не набирать соединение".

  3. Нажмите Настройки локальной сети.

  4. В диалоговом окне "Параметры локальной сети" в разделе "Автоматическая настройка" снимите флажки "Автоматически определять параметры" и "Использовать сценарий автоматической настройки".

  5. В разделе Прокси-сервер снимите флажок Использовать прокси-сервер для вашей локальной сети и нажмите кнопку ОК.

Насколько мне известно, я думаю, что это должно работать как для Windows 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

Я буду более чем счастлив ответить на вопросы по этому поводу, потому что будут некоторые уникальные ситуации, и я хотел бы помочь, так как мне пришлось собрать воедино то, что я нашел выше.

Но чтобы представить это наглядно, это работает в Windows 8.1 с использованием соединения Ethernet с ноутбуком, который использует свое соединение с виртуальным адаптером. Это может работать так же хорошо, если вы пытаетесь поделиться источником беспроводного соединения.

Другие вопросы по тегам