web-dev-qa-db-fra.com

Comment activer le partage de connexion Internet en ligne de commande?

Je peux le faire manuellement en cliquant avec le bouton droit de la souris sur une connexion réseau, en ouvrant l'onglet Partage et en cliquant sur la case à cocher "Autoriser les autres utilisateurs du réseau à se connecter via la connexion Internet de cet ordinateur".

Maintenant, je dois automatiser cette tâche. Existe-t-il un outil de ligne de commande ou une applet de commande Powershell pour accomplir cela?

34
utapyngo

Voici une solution purement PowerShell (qui devrait être exécutée avec des privilèges d’administrateur):

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

Voir également cette question à l'adresse social.msdn.Microsoft.com :

Vous devez activer l'interface publique sur l'adaptateur auquel vous vous connectez et activer le partage sur l'interface privée pour l'adaptateur que vous souhaitez pouvoir utiliser pour le réseau.

19
utapyngo

J'ai créé un outil de ligne de commande simple pour cela.

  1. Téléchargez et décompressez ou git clone [email protected]:utapyngo/icsmanager.git

  2. Construire en exécutant build.cmd

  3. Enregistrez la bibliothèque HNetCfg COM: regsvr32 hnetcfg.dll (il s'agit d'une bibliothèque standard située à %WINDIR%\System32)

Utilisation en ligne de commande

  1. Ouvrez la ligne de commande Invite en tant qu'administrateur

    cd dans le répertoire icsmanager (ou icsmanager-master si vous avez téléchargé Zip).

  2. Tapez icsmanager

    Cela devrait afficher les connexions réseau disponibles. Notez l'attribut GUID. Pour utiliser cet outil, vous devez avoir au moins deux connexions.

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

    Cela devrait permettre à ICS.

Utilisation de Powershell

  1. Module d'importation:

    Module d'importation IcsManager.dll

  2. Liste des connexions réseau:

    Get-NetworkConnections

  3. Démarrer le partage de connexion Internet:

    Enable-ICS "Connexion à partager" "Connexion à domicile"

  4. Arrêter le partage de connexion Internet:

    Désactiver-ICS


Avertissement: je n'ai pas encore testé l'outil. Utilisez à vos risques et périls. N'hésitez pas à ouvrir un problème sur GitHub si quelque chose ne fonctionne pas. Les demandes de tirage sont également les bienvenues.

9
utapyngo

À ma connaissance, la fonctionnalité de routage a été supprimée de Windows depuis Vista et n’est disponible que sous Windows Server.

L'astuce suivante peut être trouvée sur Internet pour réactiver netsh routing, que vous pouvez essayer à vos propres risques. Je suggère d’abord les précautions habituelles, notamment la création d’un point de restauration du système.

  1. Obtenez IPMONTR.DLL et IPPROMON.DLL à partir de 2003 ou de XP
  2. Copiez-les dans WINDOWS\SYSTEM32
  3. Exécuter dans l'invite de commande (cmd) en tant qu'administrateur:

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

Vous devrez peut-être également définir le service Routage et accès à distance sur Démarrage automatique.

Redémarrez avant d'essayer quoi que ce soit.

5
harrymc

Un ancien collègue à moi avait l'habitude de le faire via l'outil propre de la fenêtre, Windows. Comme je ne l'ai jamais fait moi-même, je peux vous conseiller de jeter un coup d'œil à la documentation de Microsoft netsh .

Si je me souviens bien, c’était un peu dommage et beaucoup d’appels netsh au besoin, mais cela a fonctionné à la fin ...

2
Langhard

Ce qui suit devrait fonctionner

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
2
Craig

Malheureusement, il n'y a pas de telle commande cmd pour Windows 7 ou plus, alors j'ai utilisé cette fonction Visual Basic pour le faire:

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

Veuillez noter que "" "" est obligatoire. S'amuser.

1
imad latch

D'après ce que j'ai lu, si ceux qui ont posté disent que netsh ne fonctionne pas à partir de 7 ans et plus, c'est inexact. Maintenant, s’il s’agit strictement de "netsh routing", je suppose que vous pourriez avoir raison, mais cela fonctionne - je suis sur le point d’afficher le contenu d’un fichier de commandes que j’ai créé et qui fonctionne sous Windows 8.1. Au lieu d’obtenir les commentaires et les informations habituels, je vais essayer d’aider ceux qui disposent des informations complètes.

Tout d'abord, vous devez vous assurer que la connexion que vous allez partager est configurée pour réellement partager la connexion. Ce lien ici devrait vous aider pour cela:

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

  1. Ouvrez Network Connections en cliquant sur le bouton Démarrer Image du bouton Démarrer, puis en cliquant sur Panneau de configuration. Dans la zone de recherche, tapez adaptateur, puis, sous Centre Réseau et partage, cliquez sur Afficher les connexions réseau.

  2. Cliquez avec le bouton droit sur la connexion que vous souhaitez partager, puis cliquez sur Propriétés. Autorisation d'administrateur requise Si vous êtes invité à entrer un mot de passe administrateur ou une confirmation, entrez le mot de passe ou indiquez une confirmation.

  3. Cliquez sur l'onglet Partage, puis cochez la case Autoriser les autres utilisateurs du réseau à se connecter via la connexion Internet de cet ordinateur.

Après avoir suivi les étapes ci-dessus pour configurer ICS sur l'ordinateur hôte, apportez les modifications suivantes sur tous les autres ordinateurs (mais pas sur l'ordinateur hôte).

  1. Ouvrez Options Internet en cliquant sur le bouton Démarrer Image du bouton Démarrer, sur Panneau de configuration, sur Réseau et Internet, puis sur Options Internet.

  2. Cliquez sur l'onglet Connexions, puis sur Ne jamais établir de connexion.

  3. Cliquez sur Paramètres LAN.

  4. Dans la boîte de dialogue Paramètres du réseau local (LAN), sous Configuration automatique, décochez les cases Détecter automatiquement les paramètres et Utiliser le script de configuration automatique.

  5. Sous Serveur proxy, décochez la case Utiliser un serveur proxy pour votre réseau local, puis cliquez sur OK.

À ma connaissance, cela devrait fonctionner pour Windows 7 et 8.

Maintenant que le sujet portait sur une solution de ligne de commande, il s'agit du contenu du fichier de commandes décrivant la procédure d'obtention d'un adaptateur sans fil virtuel configuré et prêt à l'emploi.

Une fois créé, vous devrez peut-être suivre les instructions ci-dessus et vous assurer de partager la connexion source avec le nouvel adaptateur virtuel créé, visible par vos périphériques sans fil.

Fichier .bat de partage de connexion:

@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

Je serai plus qu'heureux de répondre à vos questions à ce sujet car il y aura des situations uniques et j'aimerais vous aider car j'ai dû reconstituer ce que j'ai trouvé ci-dessus.

Mais pour mettre cela en perspective, cela fonctionne sous Windows 8.1 en utilisant une connexion Ethernet dans un ordinateur portable partageant sa connexion à l'adaptateur virtuel. Cela peut aussi bien fonctionner si vous essayez de partager une connexion sans fil source.

1
user2562950