如何使用命令行启用 Internet 连接共享?

如何使用命令行启用 Internet 连接共享?

我可以通过右键单击网络连接、打开“共享”选项卡并单击“允许其他网络用户通过此计算机的 Internet 连接进行连接”复选框来手动执行此操作。

现在我需要自动执行此任务。是否有命令行工具或 Powershell cmdlet 可以完成此操作?

答案1

这是一个纯 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

您必须在所连接的适配器上启用公共接口,并在您想要用于网络的适配器的私有接口上启用共享。

答案2

我已经创建了一个简单的命令行工具为了这。

  1. 下载并解压缩或git clone [email protected]:utapyngo/icsmanager.git

  2. 通过运行构建build.cmd

  3. 注册HNetCfgCOM 库:(regsvr32 hnetcfg.dll它是位于的标准库%WINDIR%\System32

命令行用法

  1. 以管理员身份打开命令行提示符

    cdicsmanager目录(或者icsmanager-master如果你下载了 zip)。

  2. 类型icsmanager

    这应该会显示可用的网络连接。请注意 GUID 属性。要使用此工具,您至少需要有两个连接。

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

    这应该会启用 ICS。

Powershell 使用

  1. 导入模块:

    导入模块 IcsManager.dll

  2. 列出网络连接:

    获取网络连接

  3. 启动 Internet 连接共享:

    启用 ICS“共享连接”“家庭连接”

  4. 停止 Internet 连接共享:

    禁用ICS


免责声明:我尚未测试该工具。使用它需要您自担风险。如果出现问题,请随时在 GitHub 上打开问题。也欢迎提交拉取请求。

答案3

据我了解,自 Vista 以来,路由功能已从 Windows 中删除,现在仅在 Windows Server 中可用。

您可以在互联网上找到以下技巧来重新启用netsh routing,您可以自行尝试,但风险自负。我建议首先采取通常的预防措施,包括创建系统还原点。

  1. 从 2003 或 XP 获取 IPMONTR.DLL 和 IPPROMON.DLL
  2. 将它们复制到 WINDOWS\SYSTEM32
  3. 以管理员身份在命令提示符(cmd)中运行:

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

您可能还需要将路由和远程访问服务设置为自动启动。

尝试任何操作之前请重新启动。

答案4

不幸的是,Windows 7 或更高版本没有这样的 cmd 命令,因此我使用这个 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

请注意“”是必填项。玩得开心。

相关内容