40 votes

Comment activer le partage de connexion Internet en utilisant la 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 cochant la case "Autoriser d'autres utilisateurs du réseau à se connecter via la connexion Internet de cet ordinateur".

Maintenant, j'ai besoin d'automatiser cette tâche. Existe-t-il un outil en ligne de commande ou une cmdlet Powershell pour accomplir cela ?

24voto

utapyngo Points 1843

Voici une solution PowerShell pure (doit être exécutée avec des privilèges administratifs) :

# 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 aussi 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 de l'adaptateur que vous souhaitez utiliser pour le réseau.

9voto

utapyngo Points 1843

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

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

  2. Construisez en exécutant build.cmd

  3. Enregistrez la bibliothèque COM HNetCfg : 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

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

  2. Tapez icsmanager

    Cela devrait afficher les connexions réseau disponibles. Remarquez l'attribut GUID. Pour utiliser cet outil, vous avez besoin d'au moins deux connexions.

  3. Tapez icsmanager enable {GUID-DE-LA-CONNEXION-À-PARTAGER} {GUID-DE-LA-CONNEXION-DOMICILE}

    Cela devrait activer ICS.

Utilisation PowerShell

  1. Importer le module :

    Import-Module IcsManager.dll

  2. Lister les connexions réseau :

    Get-NetworkConnections

  3. Démarrer le partage de connexion Internet :

    Enable-ICS "Connection to share" "Home connection"

  4. Arrêter le partage de connexion Internet :

    Disable-ICS


Avis de non-responsabilité : Je n'ai pas encore testé l'outil. Utilisez-le à 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.

4voto

harrymc Points 394411

À ma connaissance, la capacité de routage a été supprimée de Windows depuis Vista et n'est disponible actuellement que dans Windows Server.

La méthode suivante peut être trouvée sur Internet pour réactiver netsh routing, que vous pouvez essayer à vos propres risques. Je recommande d'abord les précautions habituelles, y compris la création d'un point de restauration système.

  1. Obtenez IPMONTR.DLL et IPPROMON.DLL de 2003 ou de XP
  2. Copiez-les dans WINDOWS\SYSTEM32
  3. Exécutez dans l'invite de commandes (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 distant sur un démarrage automatique.

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

2voto

guestGirl Points 1

Malheureusement, il n'existe aucune commande cmd pour Windows 7 ou plus, donc 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("Démarrage du partage Internet pour : " & 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("Partage Internet réussi pour : " & 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("VOTRE RÉSEAU ACTIF", "VOTRE ADAPTATEUR À PARTAGER", True)

Veuillez noter que """" est requis. Amusez-vous bien.

1voto

Zuko Points 111

Le suivant devrait fonctionner

netsh routing ip autodhcp install
netsh routing ip autodhcp set interface name="Connection réseau local (ou où se trouve votre connexion Internet)" mode=enable
netsh routing ip autodhcp set global 192.168.0.1 255.255.255.0 11520

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X