修改IP地址等的相关问题
首先,如下是我在使用的两段用来修改IP和DNS等的代码(这两段代码的原创不是我,朋友传给我的,结果他也忘记原作者是谁了,这里先给原作者道歉)
Func __SetIpAddress($IPAddress, $SubnetMask, $Gateway)
;设置IP、MASK、GW
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled =TRUE", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
$IPAddress = _ArrayCreate($IPAddress)
$SubnetMask = _ArrayCreate($SubnetMask)
$Gateway = _ArrayCreate($Gateway)
$GatewayMetric = _ArrayCreate("1")
If IsObj($colItems) Then
For $objItem In $colItems
$errEnable = $objItem.EnableStatic ($IPAddress, $SubnetMask)
$errGateways = $objItem.SetGateways ($Gateway, $GatewayMetric)
Next
Else
MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Win32_NetworkAdapterConfiguration")
EndIf
EndFunc
Func __SetDNS($DNS1, $DNS2)
;设置DNS
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery ("SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled =TRUE", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)
$DNS = _ArrayCreate($DNS1, $DNS2)
If IsObj($colItems) Then
For $objItem In $colItems
$strDNSServerSearchOrder = $objItem.SetDNSServerSearchOrder ($DNS)
Next
Else
MsgBox(0, "WMI Output", "No WMI Objects Found for class: " & "Win32_NetworkAdapterConfiguration")
EndIf
EndFunc
下面我提两个问题,朋友们帮帮忙
1、上述代码修改IP地址和DNS时有一定的失败率,尤以DNS设置的失败率为慎。运气好的时候无论做几次修改,都可以成功,运气不好无论运行几次都修改不了。我不知道是否是我的使用有误,请朋友们帮忙测试这个函数我简单的解释一下:
__SetIpAddress($IPAddress, $SubnetMask, $Gateway),IP等的设定:$IPAddress(IP地址),$SubnetMask(子网掩码),$Gateway(网关)
__SetDNS($DNS1, $DNS2),DNS的设定,$DNS1(首选DNS), $DNS2(备用DNS)
2、我看到过一些网络设定程序,有一个选择设定哪块网卡的下拉框。也就是说,程序运行时检测当前计算机有几块网卡,每块网卡分别是什么,然后可选其中任一网卡进行IP等的设定,这个是怎么做的,我没思路了……
先谢谢朋友们了!
[ 本帖最后由 skyfree 于 2008-5-20 18:31 编辑 ] 哈,你也来修正这问题了啊..
For $objItem In $colItems
$errEnable = $objItem.EnableStatic ($IPAddress, $SubnetMask)
$errGateways = $objItem.SetGateways ($Gateway, $GatewayMetric)
Next
这里应该是多网卡的循环, 从这里下手就可以把多网卡的信息读出来, 当然也可以重新设置了
你的快速设置工具里,确实应该适合多网卡, 而且最好显示现在的网卡状态(IP啦什么的),程序根据输入框里是否有变动来判断是否修改网卡状态 wmi的啊 正好学习了 好像很复杂的样子,看不懂呀。:face (3): 更改电脑ip和网关
Run(@ComSpec & ' /c netsh -c interface ip set address "本地连接" static 192.168.0.2 255.255.255.0 192.168.0.1 1',"",@SW_HIDE)
在网上某处看到这样一行示例代码 很复杂吗?枚举注册表关于网卡的键,取得后,按选择去设置就行了 学习学习中,, 学习学习中,, 直接批处理解决的问题 netsh处理更简单实用哦
页:
[1]