我可以通过右键单击网络连接,打开“共享”选项卡,然后单击“允许其他网络用户通过此计算机的Internet连接进行连接”复选框来手动完成此操作。
现在,我需要自动执行此任务。是否有命令行工具或Powershell cmdlet可以完成此任务?
Microsoft-Windows-SharedAccess
无人值守的Windows安装程序组件是如此的接近,但它仅适用于Windows安装程序!technet.microsoft.com/zh-CN/library/ff715511.aspx
我可以通过右键单击网络连接,打开“共享”选项卡,然后单击“允许其他网络用户通过此计算机的Internet连接进行连接”复选框来手动完成此操作。
现在,我需要自动执行此任务。是否有命令行工具或Powershell cmdlet可以完成此任务?
Microsoft-Windows-SharedAccess
无人值守的Windows安装程序组件是如此的接近,但它仅适用于Windows安装程序!technet.microsoft.com/zh-CN/library/ff715511.aspx
Answers:
这是一个纯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上的此问题:
您必须在要连接的适配器上启用公共接口,并在专用接口上启用要用于网络的适配器的共享。
[System.Runtime.Interopservices.Marshal]::ReleaseComObject(...)
洒英寸
EnableSharing
抛出此异常,即使我运行PowerShell中以管理员身份:异常:异常调用“EnableSharing”与“1”的说法(S):“事件无法调用任何订户(从HRESULT异常: 0x80040201)“->调用目标已引发异常。->事件无法调用任何订阅者(HRESULT的异常:0x80040201)
regsvr32 hnetcfg.dll
以管理员身份手动运行。
我为此创建了一个简单的命令行工具。
下载并解压缩或git clone git@github.com:utapyngo/icsmanager.git
通过运行进行构建 build.cmd
注册HNetCfg
COM库:(regsvr32 hnetcfg.dll
这是位于的标准库%WINDIR%\System32
)
以管理员身份打开命令行提示符
cd
到icsmanager
目录(或者icsmanager-master
如果您下载了zip)。
类型 icsmanager
这应该显示可用的网络连接。注意GUID属性。要使用此工具,您至少需要两个连接。
类型 icsmanager enable {GUID-OF-CONNECTION-TO-SHARE} {GUID-OF-HOME-CONNECTION}
这应该启用ICS。
导入模块:
导入模块IcsManager.dll
列出网络连接:
获取网络连接
开始Internet连接共享:
启用ICS“共享连接”“家庭连接”
停止Internet连接共享:
禁用ICS
免责声明:我尚未测试该工具。需要您自担风险使用它。如果无法解决问题,请随时在GitHub上发布问题。也欢迎请求请求。
C:\Windows\System32\hnetcfg.dll
。
regsvr32 hnetcfg.dll
。我hnetcfg.dll
在msdn.microsoft.com/zh-cn/library/windows/desktop/…上
据我了解,自Vista以来,路由功能已从Windows中删除,现在仅在Windows Server中可用。
netsh routing
您可以在Internet上找到以下技巧来重新启用该工具,但后果自负。我首先建议通常的预防措施,包括创建系统还原点。
以管理员身份在命令提示符(cmd)中运行:
netsh add helper ipmontr.dll
netsh add helper ippromon.dll
您可能还需要将“路由和远程访问服务”设置为“自动启动”。
在尝试任何操作之前,请重新引导。
The following helper DLL cannot be loaded: IPMONTR.DLL.
The following helper DLL cannot be loaded: IPPROMON.DLL.
以下应该工作
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
netsh routing
在Windows XP中可以这样做,但是在Windows 7中,他们已删除了该命令。这就是为什么我只要求有关Windows 7
不幸的是,对于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
请注意,“””是必需的。玩得开心。
根据我的阅读,如果已发布的netsh
内容从7开始不起作用,那是不正确的。现在,如果严格说来,netsh routing
”,我想您可能是对的,但这确实可行-我将展示我在Windows 8.1中创建的该批处理文件的内容。我将不会尝试获得通常的评论和信息,而是会尝试为他们提供全部信息。
首先,您需要确保将要共享的连接设置为实际共享连接。这里的链接应该帮助您:
http://windows.microsoft.com/zh-CN/windows/set-internet-connection-sharing#1TC=windows-7
通过单击“开始”按钮“开始”按钮的图片,然后单击“控制面板”,打开“网络连接”。在搜索框中,键入适配器,然后在“网络和共享中心”下,单击“查看网络连接”。
用鼠标右键单击要共享的连接,然后单击“属性”。需要管理员权限如果系统提示您输入管理员密码或确认,请输入密码或提供确认。
单击共享选项卡,然后选择允许其他网络用户通过此计算机的Internet连接进行连接复选框。
在按照上述步骤在主机上设置ICS之后,请在所有其他计算机(而不是主机)上进行以下更改。
通过单击“开始”按钮“开始”按钮的图片,“控制面板”,“网络和Internet”,然后单击“ Internet选项”,打开“ Internet选项”。
单击连接选项卡,然后单击从不拨号连接。
单击局域网设置。
在“局域网(LAN)设置”对话框中的“自动配置”下,清除“自动检测设置”和“使用自动配置脚本”复选框。
在“代理服务器”下,清除“为LAN使用代理服务器”复选框,然后单击“确定”。
据我所知,我认为这对Windows 7和Windows 8均适用。
现在,由于该主题是关于命令行解决方案的,因此这是我如何配置虚拟无线适配器并准备就绪的批处理文件内容。
创建虚拟适配器后,您可能必须使用上述说明,并确保与新创建的虚拟适配器共享源连接,无线设备将看到该虚拟适配器。
连接共享.bat文件:
@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
我会很乐意回答有关此问题,因为将会有一些独特的情况,并且由于我不得不拼凑上面的发现,我想提供帮助。
但是,为了清楚起见,它可以在Windows 8.1上使用以太网连接到便携式计算机,并共享其与虚拟适配器的连接。如果您尝试共享源无线连接,则它可能也同样有效。