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


35

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?


4
Vous ne pouvez pas essayer ceci pour l'instant, mais vous pouvez essayer d'exécuter Process Monitor et de le pointer vers votre registre. Voyez quelles clés / valeurs changent lorsque vous basculez & appliquez le paramètre, puis écrivez votre script en conséquence.
Iszi

Question / info connexes sur StackOverflow: Activez le partage de connexion Internet par programme
mercredi

Le Microsoft-Windows-SharedAccesscomposant d'installation sans surveillance de Windows est si proche, mais il ne fonctionne que lors de l'installation de Windows! technet.microsoft.com/en-us/library/ff715511.aspx
Jacob Krall

Réponses:


20

Voici une solution PowerShell pure (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 sur 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.


1
Je ne savais pas que vous pouviez faire de l'interopérabilité COM avec PowerShell! - Je suppose que vous en avez besoin [System.Runtime.Interopservices.Marshal]::ReleaseComObject(...).
Jacob Krall

L'appel à EnableSharingrenvoie cette exception, même si j'exécute PowerShell en tant qu'administrateur: Exception: Exception appelant "EnableSharing" avec un ou plusieurs arguments "1": "Un événement n'a pas pu appeler l'un des abonnés (exception de HRESULT: 0x80040201) "-> Une exception a été émise par la cible d'un appel. -> Un événement n'a pu invoquer aucun des abonnés (Exception de HRESULT: 0x80040201)
Jacob Krall

Essayez de vous lancer en regsvr32 hnetcfg.dlltant qu'administrateur manuellement.
utapyngo

Je me demande: que signifie "activer l'interface publique sur l'adaptateur"?
Jacob Krall

2
Dans les versions plus récentes de Powershell, .SharingType est maintenant .SharingConnectionType
Baodad

9

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

  1. Téléchargez et décompressez ougit clone git@github.com:utapyngo/icsmanager.git

  2. Construire en courant build.cmd

  3. Enregistrez la HNetCfgbibliothèque COM: regsvr32 hnetcfg.dll(c'est une bibliothèque standard située à %WINDIR%\System32)

Utilisation en ligne de commande

  1. Ouvrez l'invite de commande en tant qu'administrateur.

    cddans le icsmanagerrépertoire (ou icsmanager-mastersi vous avez téléchargé le zip).

  2. Type 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. Type 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:

    Activer-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.


Soigné. Cela utilise un binaire externe appelé NETCONLib; d'où vient-il? Qu'est ce que ça fait?
Jacob Krall

Aha. Il s'agit d'un wrapper de classe COM pour la "Bibliothèque de types NetCon 1.0" fournie avec Windows.
Jacob Krall

@JacobKrall, oui, il est situé à C:\Windows\System32\hnetcfg.dll.
utapyngo

On dirait que cela fera exactement ce que je veux - je vais l'essayer.
Jacob Krall

1
Désolé, je l’ai fait il ya plusieurs mois et j’ai oublié que HNetCfg devait être enregistré manuellement avec regsvr32 hnetcfg.dll. Et j'ai appris à propos hnetcfg.dllde msdn.microsoft.com/en-us/library/windows/desktop/…
utapyngo

5

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

Vous pouvez réactiver l’astuce suivante sur Internet netsh routing, que vous pouvez essayer à vos risques et périls. 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 à 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.


1
Est-il légal de copier des fichiers de XP sans licence XP?
utapyngo

1
Essayé cela sur Windows 7 64bit. Copié les fichiers de XP 64 bits. Courir en tant qu'administrateur. Erreurs:The following helper DLL cannot be loaded: IPMONTR.DLL. The following helper DLL cannot be loaded: IPPROMON.DLL.
utapyngo

1
J'ai également essayé l'ajout "assistant" et je suis désolé de confirmer que cela ne fonctionne pas pour 64 bits. En ce qui concerne la légalité de la transplantation des dll auxquelles vous avez droit sur les deux systèmes d’exploitation, ceci n’est pas clair. Vous n'avez pas le droit de modifier les fichiers Windows, mais la copie de ceux-ci n'est peut-être pas interdite par la licence XP (cela m'étonnerait que Microsoft puisse l'avoir prévu à l'avance).
harrymc

1
Il convient de mentionner dans la réponse que cela ne fonctionne pas pour Windows 64 bits. Veuillez également mentionner que les fichiers doivent être copiés à partir de XP 32 bits.
utapyngo

@utapyngo: On ne peut pas être sûr qu'il n'y a vraiment aucun moyen de faire fonctionner cela en 64 bits. Selon mes études, le problème est que plus de dll que ces deux doivent être copiés, mais analyser complètement le problème nécessite plus de temps que je peux en donner.
harrymc

2

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 à peu près tout ce que l’on pouvait faire, mais cela a fonctionné à la fin ...


6
C'était possible avec netsh routingWindows XP mais sous Windows 7, cette commande a été supprimée. C'est pourquoi je ne parle que de Windows 7.
utapyngo

2

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

8
C'était possible avec netsh routingWindows XP mais sous Windows 7, cette commande a été supprimée. C'est pourquoi je ne parle que de Windows 7.
utapyngo

1

Malheureusement, il n'y a pas de telle commande cmd pour Windows 7 ou plus, j'ai donc 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

D'après ce que j'ai lu, si ceux qui ont posté disent que netshcela ne fonctionne pas à partir de 7 ans et plus, c'est inexact. Maintenant, s’il s’agit strictement de " netsh routing", vous avez peut-être 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.

Une fois que vous avez suivi les étapes ci-dessus pour configurer ICS sur l’ordinateur hôte, apportez les modifications suivantes à 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.


Bienvenue sur Super User! Merci pour la réponse détaillée, j’ai modifié votre question afin de rationaliser une partie du texte et de mettre le contenu de votre fichier chauve-souris dans un bloc de code. Vous pouvez voir d'autres instructions de formatage s'il y a des problèmes - veuillez vous assurer que je n'ai pas modifié le sens du code.
Bertieb

Ouais c'est bien et merci. Je savais que j'aurais dû faire un meilleur travail sur le formatage. Belle touche sur le lien MS pour éviter d'avoir à y aller réellement.
user2562950

Ne vous inquiétez pas pour cela, vous apprendrez assez vite la syntaxe de démarquage :) L'inclusion du contenu du lien fait partie d'une politique concernant la réponse aux questions - les liens peuvent disparaître, changer ou disparaître. Ceci est moins probable dans le cas de Microsoft, mais reste très possible. C'est une bonne pratique de mettre tout ce qui est nécessaire pour une solution dans la réponse elle-même. J'ai hâte de voir d'autres bonnes réponses de votre part!
Bertieb
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.