34

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

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

7 ответов7

19

Вот чистое решение 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:

Вы должны включить общедоступный интерфейс на адаптере, к которому вы подключаетесь, и разрешить общий доступ на частном интерфейсе для адаптера, который вы хотите использовать в сети.

9

Я создал простой инструмент командной строки для этого.

  1. Загрузите и разархивируйте или git clone git@github.com:utapyngo/icsmanager.git

  2. Сборка с помощью build.cmd

  3. Зарегистрируйте COM-библиотеку HNetCfg : 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}

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

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

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

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

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

    Get-NetworkConnections

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

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

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

    Отключить-ICS


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

5

Насколько я понимаю, возможности маршрутизации были удалены из Windows начиная с Vista и теперь доступны только в Windows Server.

В Интернете можно найти следующую уловку для повторной активации netsh routing , которую вы можете попробовать на свой страх и риск. Сначала я предлагаю обычные меры предосторожности, включая создание точки восстановления системы.

  1. Получите IPMONTR.DLL и IPPROMON.DLL с 2003 или с XP
  2. Скопируйте их в WINDOWS\SYSTEM32
  3. Запустите в командной строке (cmd) от имени администратора:

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

Вам также может потребоваться установить для службы маршрутизации и удаленного доступа автоматический запуск.

Перезагрузитесь, прежде чем пытаться что-либо.

2

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

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

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
1

К сожалению, нет такой команды 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

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

0

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

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

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

  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 с ноутбуком, который использует свое соединение с виртуальным адаптером. Это может работать так же хорошо, если вы пытаетесь поделиться источником беспроводного соединения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .