首页  编辑  

启用Internet连接共享(ICS)的脚本

Tags: /计算机文档/脚本,批处理/   Date Created:

通过一个批处理启动WIFI共享笔记本给手机

请使用附件即可,需要管理员权限运行。

A batch tools for Windows, Create virtual WIFI hotspot(WIFI AP), start, stop WIFI, which make the laptop become a AP sharing with mobile device

这是一个利用系统的WIFI承载网络功能来建立虚拟AP的批处理工具,无需第三方的软件支持,你就可以把你的笔记本变成一个WIFI路由器。你可以创建WIFI热点,启动、停止WIFI热点、修改密码。批处理会自动判断你的电脑是否支持承载网络。


OPTION EXPLICIT

DIM ICSSC_DEFAULT, CONNECTION_PUBLIC, CONNECTION_PRIVATE, CONNECTION_ALL

DIM NetSharingManager

DIM PublicConnection, PrivateConnection

DIM EveryConnectionCollection

DIM objArgs

DIM priv_con, publ_con

dim switch

ICSSC_DEFAULT         = 0

CONNECTION_PUBLIC     = 0

CONNECTION_PRIVATE    = 1

CONNECTION_ALL        = 2

Main()

sub Main( )

   Set objArgs = WScript.Arguments

   if objArgs.Count = 3 then

       priv_con = objArgs(0)

 publ_con = objArgs(1)

 switch = objArgs(2)

       if Initialize() = TRUE then

           GetConnectionObjects()

           FirewallTestByName priv_con,publ_con

       end if

   else

       DIM szMsg

       if Initialize() = TRUE then

           GetConnectionObjects()

           FirewallTestByName "list","list"

       end if

       szMsg = "To share your internet connection, please provide the name of the private and public connections as the argument." & vbCRLF & vbCRLF & _

               "Usage:" & vbCRLF & _

               "       " & WScript.scriptname & " " & chr(34) & "Private Connection Name" & chr(34) & " " & chr(34) & "Public Connection Name" & chr(34)

       WScript.Echo( szMsg & vbCRLF & vbCRLF)

   end if

end sub

sub FirewallTestByName(con1,con2)

on error resume next

   DIM Item

   DIM EveryConnection

   DIM objNCProps

   DIM szMsg

   DIM bFound1,bFound2

   WScript.echo(vbCRLF & vbCRLF)

   bFound1 = false

   bFound2 = false

   for each Item in EveryConnectionCollection

       set EveryConnection = NetSharingManager.INetSharingConfigurationForINetConnection(Item)

       set objNCProps = NetSharingManager.NetConnectionProps(Item)

       szMsg = "Name: "       & objNCProps.Name & vbCRLF & _

               "Guid: "       & objNCProps.Guid & vbCRLF & _

               "DeviceName: " & objNCProps.DeviceName & vbCRLF & _

               "Status: "     & objNCProps.Status & vbCRLF & _

               "MediaType: "  & objNCProps.MediaType

       if EveryConnection.SharingEnabled then

           szMsg = szMsg & vbCRLF & _

                   "SharingEnabled" & vbCRLF & _

                   "SharingType: " & ConvertConnectionTypeToString(EveryConnection.SharingConnectionType)

       end if

       if objNCProps.Name = con1 then

           bFound1 = true

           if EveryConnection.SharingEnabled = False and switch="on" then

               szMsg = szMsg & vbCRLF & "Not Shared... Enabling private connection share..."

               WScript.Echo(szMsg)

               EveryConnection.EnableSharing CONNECTION_PRIVATE

               szMsg = " Shared!"

     elseif(switch = "off") then

       szMsg = szMsg & vbCRLF & "Shared... DisEnabling private connection share..."

               WScript.Echo(szMsg)

       EveryConnection.EnableSharing CONNECTION_ALL

   

           end if

         end if

       if objNCProps.Name = con2 then

           bFound2 = true

           if EveryConnection.SharingEnabled = False and switch="on" then

               szMsg = szMsg & vbCRLF & "Not Shared... Enabling public connection share..."

               WScript.Echo(szMsg)

               EveryConnection.EnableSharing CONNECTION_PUBLIC

               szMsg = " Shared!"

     elseif(switch = "off") then

       szMsg = szMsg & vbCRLF & "Shared... DisEnabling public connection share..."

               WScript.Echo(szMsg)

       EveryConnection.EnableSharing CONNECTION_ALL

           end if

       end if

       WScript.Echo(szMsg & vbCRLF & vbCRLF)

   next

   if( con1 <> "list" ) then

       if( bFound1 = false ) then

           WScript.Echo( "Connection " & chr(34) & con1 & chr(34) & " was not found" )

       end if

       if( bFound2 = false ) then

           WScript.Echo( "Connection " & chr(34) & con2 & chr(34) & " was not found" )

       end if

   end if

end sub

function Initialize()

   DIM bReturn

   bReturn = FALSE

   set NetSharingManager = Wscript.CreateObject("HNetCfg.HNetShare.1")

   if (IsObject(NetSharingManager)) = FALSE then

       Wscript.Echo("Unable to get the HNetCfg.HnetShare.1 object")

   else

       if (IsNull(NetSharingManager.SharingInstalled) = TRUE) then

           Wscript.Echo("Sharing isn't available on this platform.")

       else

           bReturn = TRUE

       end if

   end if

   Initialize = bReturn

end function

function GetConnectionObjects()

   DIM bReturn

   DIM Item

   bReturn = TRUE

   if GetConnection(CONNECTION_PUBLIC) = FALSE then

       bReturn = FALSE

   end if

   if GetConnection(CONNECTION_PRIVATE) = FALSE then

       bReturn = FALSE

   end if

   if GetConnection(CONNECTION_ALL) = FALSE then

       bReturn = FALSE

   end if

   GetConnectionObjects = bReturn

end function

function GetConnection(CONNECTION_TYPE)

   DIM bReturn

   DIM Connection

   DIM Item

   bReturn = TRUE

   if (CONNECTION_PUBLIC = CONNECTION_TYPE) then

       set Connection = NetSharingManager.EnumPublicConnections(ICSSC_DEFAULT)

       if (Connection.Count > 0) and (Connection.Count < 2) then

           for each Item in Connection

               set PublicConnection = NetSharingManager.INetSharingConfigurationForINetConnection(Item)

           next

       else

           bReturn = FALSE

       end if

   elseif (CONNECTION_PRIVATE = CONNECTION_TYPE) then

       set Connection = NetSharingManager.EnumPrivateConnections(ICSSC_DEFAULT)

       if (Connection.Count > 0) and (Connection.Count < 2) then

           for each Item in Connection

               set PrivateConnection = NetSharingManager.INetSharingConfigurationForINetConnection(Item)

           next

       else

           bReturn = FALSE

       end if

   elseif (CONNECTION_ALL = CONNECTION_TYPE) then

       set Connection = NetSharingManager.EnumEveryConnection

       if (Connection.Count > 0) then

           set EveryConnectionCollection = Connection

       else

           bReturn = FALSE

       end if

   else

       bReturn = FALSE

   end if

   if (TRUE = bReturn)  then

       if (Connection.Count = 0) then

           Wscript.Echo("No " + CStr(ConvertConnectionTypeToString(CONNECTION_TYPE)) + " connections exist (Connection.Count gave us 0)")

           bReturn = FALSE

       'valid to have more than 1 connection returned from EnumEveryConnection

       elseif (Connection.Count > 1) and (CONNECTION_ALL <> CONNECTION_TYPE) then

           Wscript.Echo("ERROR: There was more than one " + ConvertConnectionTypeToString(CONNECTION_TYPE) + " connection (" + CStr(Connection.Count) + ")")

           bReturn = FALSE

       end if

   end if

   Wscript.Echo(CStr(Connection.Count) + " objects for connection type " + ConvertConnectionTypeToString(CONNECTION_TYPE))

   GetConnection = bReturn

end function

function ConvertConnectionTypeToString(ConnectionID)

   DIM ConnectionString

   if (ConnectionID = CONNECTION_PUBLIC) then

       ConnectionString = "public"

   elseif (ConnectionID = CONNECTION_PRIVATE) then

       ConnectionString = "private"

   elseif (ConnectionID = CONNECTION_ALL) then

       ConnectionString = "all"

   else

       ConnectionString = "Unknown: " + CStr(ConnectionID)

   end if

   ConvertConnectionTypeToString = ConnectionString

end function

复制以上内容命名为Ics.vbs

用C#代码执行Start.bat之后,在执行脚本Ics.vbs

启用上面的脚本需执行命令cscript /nologo Ics.vbs "虚拟无线网卡名" "本地连接" "on",此时设置共享已完成,

此处执行命令时,请采用多线程的方式


share.vbs (1.4KB)
wifi.bat (4.5KB)