wmi修改固定ip(成另一个固定ip)失败的原因?
acn有这个代码,多次测试后发现:如果原来是dhcp分配的,用这代码修改成固定ip,成功率很高,几乎很少失败。
如果是固定ip,修改成另一个固定ip,则时常失败。
官网有个帖子里提到这个现象,但没有深入解释。
请知道的达人帮忙解释下。
官网的covaks说:
Make sure you are already on DHCP before running this, or some things will fail.
_https://www.autoitscript.com/forum/topic/60588-wmi-network-settings/?do=findComment&comment=456197$objWMI = ObjGet("winmgmts:\\.\root\cimv2")
$collection = $objWMI.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For $obj In $collection
If $obj.DHCPEnabled = -1 Then
$DHCPStatus = "TRUE"
Else
$DHCPStatus = "FALSE"
EndIf
$IP = $obj.IPAddress
$Subnet = $obj.IPSubnet
$Gateway = $obj.DefaultIPGateway
$DNS = $obj.DNSServerSearchOrder
MsgBox(1, "", "IP Address: " & $IP & @CRLF & _
"Subnet: " & $Subnet & @CRLF & _
"Gateway: " & $Gateway & @CRLF & _
"First DNS: " & $DNS & @CRLF & _
"DHCP Enabled: " & $DHCPStatus)
Next
MsgBox(1,"","Setting new information")
$IP = "10.0.0.5"
$Subnet = "255.0.0.0"
$Gateway = "10.0.0.1"
Redim $DNS
$DNS = "4.2.2.1"
$DNS = "4.2.2.2"
For $obj in $collection
$err = $obj.EnableStatic($IP,$Subnet)
$err2 = $obj.SetGateways($Gateway)
$err3 = $obj.SetDNSServerSearchOrder($DNS)
If $err = 1 Then
MsgBox(1,"","Unable to set static IP until reboot")
ElseIf $err > 1 Then
MsgBox(1,"","Unable to set IP")
EndIf
;etc err2, err3..
Next VB6的代码,自用可行,供参考:
Function ChangeIP(ip As String, NM As String, GW As String, MDNS As String, SDNS As String) As String
'返回值说明:返回一个设置的中文说明.
Dim strComputer, objWMIService, colNetAdapters, strIPAddress, strSubnetMask
Dim strGateway, strGatewaymetric, strDNS, objNetAdapter, errEnable, errGateways, errDNS
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters = objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
strIPAddress = Array(ip) 'ip地址
strSubnetMask = Array(NM) '子网掩码
strGateway = Array(GW) '网关
' MsgBox TypeName(strGateway)
strDNS = Array(MDNS, SDNS) '主DNS各备DNS
strGatewaymetric = Array(1)
For Each objNetAdapter In colNetAdapters
errEnable = objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)
errGateways = objNetAdapter.SetGateways(strGateway, strGatewaymetric)
errDNS = objNetAdapter.SetDNSServerSearchOrder(strDNS) 'DNS为空的话,改为errDNS = objNetAdapter.SetDNSServerSearchOrder()
If errEnable = 0 And errGateways = 0 And errDNS = 0 Then
ChangeIP = "设置成功"
Else
If errEnable = 0 Then
ChangeIP = "IP地址和子网掩码设置成功, "
Else
ChangeIP = "IP地址或子网掩码设置失败, "
End If
If errGateways = 0 Then
ChangeIP = ChangeIP & "默认网关设置成功, "
Else
ChangeIP = ChangeIP & "默认网关设置失败, "
End If
If errDNS = 0 Then
ChangeIP = ChangeIP & "DNS设置成功"
Else
ChangeIP = ChangeIP & "DNS设置失败"
End If
End If
Next
End Function 在研究vb,刚开始。
看代码都是调用wmi
页:
[1]