Como habilitar o compartilhamento de conexão com a Internet usando a linha de comando?

33

Posso fazer isso manualmente clicando com o botão direito do mouse em uma conexão de rede, abrindo a guia Compartilhamento e clicando na caixa de seleção "Permitir que outros usuários da rede se conectem por meio da conexão com a Internet deste computador".

Agora preciso automatizar essa tarefa. Existe uma ferramenta de linha de comando ou um cmdlet Powershell para realizar isso?

    
por utapyngo 05.09.2012 / 14:56

7 respostas

18

Aqui está uma solução PowerShell pura (deve ser executada com privilégios administrativos):

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

Veja também esta pergunta em social.msdn.microsoft.com :

You have to enable the public interface on the adapter you are connecting to and enable sharing on the private interface for the adapter you want to be able to use for the network.

    
por 23.09.2013 / 16:08
9

Eu criei uma ferramenta de linha de comando simples para isso.

  1. Faça o download e descompacte ou git clone [email protected]:utapyngo/icsmanager.git

  2. Crie executando build.cmd

  3. Registre a biblioteca HNetCfg COM: regsvr32 hnetcfg.dll (é uma biblioteca padrão localizada em %WINDIR%\System32 )

Uso da linha de comando

  1. Abra o prompt da linha de comando como administrador

    cd para o diretório icsmanager (ou icsmanager-master se você baixou o zip).

  2. Digite icsmanager

    Isso deve exibir as conexões de rede disponíveis. Observe o atributo GUID. Para usar essa ferramenta, você precisa ter pelo menos duas conexões.

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

    Isso deve habilitar o ICS.

Uso do Powershell

  1. Módulo de importação:

    Import-Module IcsManager.dll

  2. Relacione as conexões de rede:

    Get-NetworkConnections

  3. Inicie o compartilhamento de conexão com a Internet:

    Enable-ICS "Conexão para compartilhar" "Conexão inicial"

  4. Parar o compartilhamento de conexão com a Internet:

    Disable-ICS

Aviso de isenção de responsabilidade: ainda não testei a ferramenta. Use a seu próprio risco. Sinta-se à vontade para abrir um problema no GitHub se algo não funcionar. Pedidos de pull também são bem-vindos.

    
por 21.09.2013 / 15:43
5

Pelo meu entendimento, o recurso de roteamento foi removido do Windows desde o Vista e é apenas disponível agora no Windows Server.

O seguinte truque pode ser encontrado na Internet para reativar o netsh routing , que você pode testar por sua conta e risco. Eu sugiro primeiro as precauções usuais, incluindo a criação de um ponto de restauração do sistema.

  1. Obtenha IPMONTR.DLL e IPPROMON.DLL em 2003 ou no XP
  2. Copie-os para o WINDOWS \ SYSTEM32
  3. Executar no prompt de comando (cmd) como administrador:

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

Você também pode precisar definir o serviço de roteamento e acesso remoto para inicialização automática.

Reinicie antes de tentar qualquer coisa.

    
por 21.09.2013 / 11:48
2

Um ex-colega meu costumava fazer isso através da própria ferramenta do Windows netsh. Como eu nunca fiz isso sozinho, eu posso aconselhá-lo a dar uma olhada no microsoft documentação do netsh .

Como eu me lembro, foi muito ruim e muitas chamadas netsh foram necessárias, mas funcionou no final ...

    
por 18.09.2012 / 09:49
2

O seguinte deve funcionar

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
    
por 01.01.2013 / 17:26
1

Infelizmente, não existe tal comando cmd para o Windows 7 ou mais, então usei essa função do Visual Basic para fazê-lo:

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

Por favor, note que "" "" é obrigatório. Divirta-se.

    
por 27.11.2014 / 13:51
0

Com base no que li, se aqueles que postaram o dito netsh não funcionarem a partir de 7 e até, isso está incorreto. Agora, se é estritamente sobre " netsh routing ", eu acho que você poderia estar certo, mas isso funciona - estou prestes a mostrar o conteúdo de um arquivo de lote que criei esse workson Windows 8.1. Em vez de receber os comentários e informações usuais, tentarei ajudar os que tiverem informações completas.

Primeiro, você precisa verificar se a conexão que você irá compartilhar está configurada para compartilhar a conexão. Este link aqui deve levá-lo para isso:

link

  1. Open Network Connections by clicking the Start button Picture of the Start button, and then clicking Control Panel. In the search box, type adapter, and then, under Network and Sharing Center, click View network connections.

  2. Right-click the connection that you want to share, and then click Properties. Administrator permission required If you're prompted for an administrator password or confirmation, type the password or provide confirmation.

  3. Click the Sharing tab, and then select the Allow other network users to connect through this computer’s Internet connection check box.

After you've followed the steps above to set up ICS on the host computer, make the following changes on all of the other computers (but not on the host computer).

  1. Open Internet Options by clicking the Start button Picture of the Start button, clicking Control Panel, clicking Network and Internet, and then clicking Internet Options.

  2. Click the Connections tab, and then click Never dial a connection.

  3. Click LAN Settings.

  4. In the Local Area Network (LAN) Settings dialog box, Under Automatic configuration, clear the Automatically detect settings and Use automatic configuration script check boxes.

  5. Under Proxy server, clear the Use a proxy server for your LAN check box, and then click OK.

No meu entender, acho que isso deve funcionar tanto no Windows 7 quanto no 8.

Agora, como o tópico era sobre uma solução de linha de comando, este é o conteúdo do arquivo em lote de como eu obtenho um adaptador sem fio virtual configurado e pronto para uso.

Após a criação, talvez seja necessário usar as instruções acima e verificar se você está compartilhando a conexão de origem com o adaptador virtual recém-criado que será visto pelos seus dispositivos sem fio.

Arquivo .bat de compartilhamento de conexão:

@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

Ficarei mais do que feliz em responder a perguntas sobre isso, pois haverá algumas situações únicas e gostaria de ajudar, já que tive que juntar tudo o que encontrei acima.

Mas, para trazer isso em perspectiva, isso funciona no Windows 8.1 usando uma conexão Ethernet em um laptop compartilhando sua conexão com o adaptador virtual. Pode funcionar igualmente bem se você estiver tentando compartilhar uma conexão sem fio de origem.

    
por 02.08.2015 / 16:17