找回密码
 加入
搜索
查看: 3944|回复: 9

修改IP地址等的相关问题

[复制链接]
发表于 2008-5-20 18:29:03 | 显示全部楼层 |阅读模式
首先,如下是我在使用的两段用来修改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 编辑 ]
发表于 2008-5-20 18:47:37 | 显示全部楼层
哈,你也来修正这问题了啊..
                For $objItem In $colItems
                        $errEnable = $objItem.EnableStatic ($IPAddress, $SubnetMask)
                        $errGateways = $objItem.SetGateways ($Gateway, $GatewayMetric)
                Next
这里应该是多网卡的循环, 从这里下手就可以把多网卡的信息读出来, 当然也可以重新设置了
你的快速设置工具里,确实应该适合多网卡, 而且最好显示现在的网卡状态(IP啦什么的),程序根据输入框里是否有变动来判断是否修改网卡状态
发表于 2008-5-23 00:49:32 | 显示全部楼层
wmi的啊 正好学习了
发表于 2008-7-27 00:56:51 | 显示全部楼层
好像很复杂的样子,看不懂呀。
发表于 2008-7-27 02:59:45 | 显示全部楼层
更改电脑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)

在网上某处看到这样一行示例代码
发表于 2008-7-29 19:19:25 | 显示全部楼层
很复杂吗?枚举注册表关于网卡的键,取得后,按选择去设置就行了
发表于 2009-8-6 00:49:11 | 显示全部楼层
学习学习中,,
发表于 2009-11-15 22:17:07 | 显示全部楼层
学习学习中,,
发表于 2009-11-17 21:36:16 | 显示全部楼层
直接批处理解决的问题
发表于 2009-11-17 21:49:11 | 显示全部楼层
netsh处理更简单实用哦
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-27 02:21 , Processed in 0.089058 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表