精易论坛
标题: wmi对网络适配器设置 [打印本页]
作者: jingyi11023995 时间: 2024-3-27 15:27
标题: wmi对网络适配器设置
本帖最后由 jingyi11023995 于 2024-3-27 15:34 编辑
目前能找到的设置IP地址的方法是CMD或者VBS的方式,wmi的没有,经过多天努力和尝试,终于得到正确代码,希望能帮到大家。
.版本 2
.程序集变量 DescriptionArr, 文本型, , "0"
.程序集变量 PhysicalAdapterArr, 文本型, , "0"
’使用示例:
wmi_枚举网卡描述和是否物理网卡 (DescriptionArr, PhysicalAdapterArr)‘先执行这个,获取到相关信息数组
根据网卡描述找到Index (“TP-LINK Wireless USB Adapter”)'测试
wmi_修改IP地址和网关和子网掩码和DNS (“TP-LINK Wireless USB Adapter”, { “192.168.0.138” }, { “255.255.255.0” }, { “192.168.0.1” }, { “202.96.128.86”, “202.96.128.166” })测试
wmi_IP设置为自动获取 (“TP-LINK Wireless USB Adapter”)测试
wmi_DNS设置为自动获取 (“TP-LINK Wireless USB Adapter”)测试
文本_是否IP格式()'精易没有这个,建议也加入
|
wmi_枚举网卡描述和是否物理网卡 | 整数型 | |
|
网卡描述数组 | 文本型 | | | |
是否物理网卡数组 | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
objWbemLocator | 对象 | | |
objWMIService | 对象 | | |
colClasses | 对象 | | |
Properties | 对象 | | |
NewEnum | 对象 | | |
objClass | 对象 | | |
hreslut | 整数型 | | |
Variant | 变体型 | | |
pcFetched | 整数型 | | |
value | 文本型 | | |
重定义数组 (网卡描述数组, 假, 0
)重定义数组 (是否物理网卡数组, 假, 0
)
如果真 (objWbemLocator.
创建 (“WbemScripting.SWbemLocator”,
))

objWMIService = objWbemLocator.
对象型方法 (“ConnectServer”,
“.”,
“root\CIMV2”, , , , , ,
) 
如果真 (objWMIService.
是否为空 () =
假)

colClasses = objWMIService.
对象型方法 (“ExecQuery”,
“SELECT * FROM Win32_NetworkAdapter”)

如果真 (colClasses.
是否为空 () =
假)


NewEnum = colClasses.
对象型方法 (“_NewEnum”,
)


如果真 (NewEnum.
是否为空 () =
假)



循环判断首 ()




hreslut =
IEnumVARIANT_Next (取对象指针 (NewEnum
), 1,
取变体型指针 (Variant
), pcFetched
)




如果真 (hreslut = 0
)





objClass = Variant.
取对象 ()





Properties = objClass.
读对象型属性 (“Properties_”,
)





value = Properties.
对象型方法 (“Item”,
“Description”).
读文本属性 (“value”,
)









加入成员 (网卡描述数组, value
)





value = Properties.
对象型方法 (“Item”,
“PhysicalAdapter”).
读文本属性 (“value”,
)









加入成员 (是否物理网卡数组, value
)





objClass.
清除 ()





Variant.
清除 ()



处理事件 ()



循环判断尾 (pcFetched = 1
)



NewEnum.
清除 ()

colClasses.清除 ()
objWMIService.清除 ()
objWbemLocator.清除 ()
调试输出 (网卡描述数组, 是否物理网卡数组
)返回 (取数组成员数 (网卡描述数组
))
|
wmi_修改IP地址和网关和子网掩码和DNS | 文本型 | |
|
Description | 文本型 | | | |
IPAddress | 文本型 | | | | SubnetMask | 文本型 | | | | Gateways | 文本型 | | | | DNS | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
objWbemLocator | 对象 | | |
objWMIService | 对象 | | |
objShare | 对象 | | |
objInParam网址 | 对象 | | |
objInParam网关 | 对象 | | |
objInParamDNS | 对象 | | |
objOutParams | 对象 | | |
var | 变体型 | | |
bool | 逻辑型 | | |
变体 | 变体型 | | |
index | 整数型 | | |
判断 (文本_是否IP格式 (IPAddress
[1
]) =
假)
返回 (“输入IP有误,正确示例:192.168.1.138”)

判断 (文本_是否IP格式 (SubnetMask
[1
]) =
假)返回 (“输入掩码有误,正确示例:255.255.255.0”)


判断 (文本_是否IP格式 (Gateways
[1
]) =
假)返回 (“输入网关有误,正确示例:192.168.1.1”)



判断 (文本_是否IP格式 (DNS
[1
]) =
假 或 文本_是否IP格式 (DNS
[2
]) =
假)
返回 (“输入DNS有误,正确示例:{ ” +
#引号 +
“202.96.128.86” +
#引号 +
“, ” +
#引号 +
“202.96.128.166” +
#引号 +
“ }” +
#引号 )


index =
根据网卡描述找到Index (Description
)
如果真 (objWbemLocator.
创建 (“WbemScripting.SWbemLocator”,
))

objWMIService = objWbemLocator.
对象型方法 (“ConnectServer”,
“.”,
“\root\CIMV2”, , , , , ,
) 
如果真 (objWMIService.
是否为空 () =
假)

objShare = objWMIService.
对象型方法 (“Get”,
“Win32_NetworkAdapterConfiguration.Index='” +
到文本 (index
) +
“'”)

如果真 (objShare.
是否为空 () =
假)


objInParam网址 = objShare.
读对象型属性 (“Methods_”,
).
对象型方法 (“Item”,
“EnableStatic”).
读对象型属性 (“InParameters”,
).
对象型方法 (“SpawnInstance_”,
)






变体.
赋值 (IPAddress,
) 


bool = objInParam网址.
对象型方法 (“Properties_”,
).
对象型方法 (“Item”,
“IPAddress”).
写属性 (“value”, 变体
)

调试输出 (objInParam网址.
取错误 (), bool
)


变体.
赋值 (SubnetMask,
) 


bool = objInParam网址.
对象型方法 (“Properties_”,
).
对象型方法 (“Item”,
“SubnetMask”).
写属性 (“value”, 变体
)

调试输出 (objInParam网址.
取错误 (), bool
)




objOutParams = objShare.
对象型方法 (“ExecMethod_”,
“EnableStatic”, objInParam网址
)


如果真 (objOutParams.
是否为空 () =
假)



var = objOutParams.
读对象型属性 (“Properties_”,
).
对象型方法 (“Item”,
“ReturnValue”).
读属性 (“value”,
)


调试输出 (“ReturnValue:”,
变体型类型 (var.
取类型 ()), var.
取数值 ())







objOutParams.
清除 ()








objInParam网关 = objShare.
读对象型属性 (“Methods_”,
).
对象型方法 (“Item”,
“SetGateways”).
读对象型属性 (“InParameters”,
).
对象型方法 (“SpawnInstance_”,
)


变体.
赋值 (Gateways,
) 


bool = objInParam网关.
对象型方法 (“Properties_”,
).
对象型方法 (“Item”,
“DefaultIPGateway”).
写属性 (“value”, 变体
)

调试输出 (objInParam网关.
取错误 (), bool
)


objOutParams = objShare.
对象型方法 (“ExecMethod_”,
“SetGateways”, objInParam网关
)




objOutParams = objShare.
对象型方法 (“ExecMethod_”,
“EnableStatic”, objInParam网址
)


如果真 (objOutParams.
是否为空 () =
假)



var = objOutParams.
读对象型属性 (“Properties_”,
).
对象型方法 (“Item”,
“ReturnValue”).
读属性 (“value”,
)


调试输出 (“ReturnValue:”,
变体型类型 (var.
取类型 ()), var.
取数值 ())







objOutParams.
清除 ()








objInParamDNS = objShare.
读对象型属性 (“Methods_”,
).
对象型方法 (“Item”,
“SetDNSServerSearchOrder”).
读对象型属性 (“InParameters”,
).
对象型方法 (“SpawnInstance_”,
)


变体.
赋值 (DNS,
)


bool = objInParamDNS.
对象型方法 (“Properties_”,
).
对象型方法 (“Item”,
“DNSServerSearchOrder”).
写属性 (“value”, 变体
)

调试输出 (objInParamDNS.
取错误 (), bool
)




objOutParams = objShare.
对象型方法 (“ExecMethod_”,
“SetDNSServerSearchOrder”, objInParamDNS
)


如果真 (objOutParams.
是否为空 () =
假)



var = objOutParams.
读对象型属性 (“Properties_”,
).
对象型方法 (“Item”,
“ReturnValue”).
读属性 (“value”,
)


调试输出 (“ReturnValue:”,
变体型类型 (var.
取类型 ()), var.
取数值 ())







objOutParams.
清除 ()






objShare.
清除 ()
objWMIService.清除 ()
objWbemLocator.清除 ()
返回 (“”)
|
wmi_IP设置为自动获取 | | |
|
Description | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
objWbemLocator | 对象 | | |
objWMIService | 对象 | | |
objShare | 对象 | | |
objInParam | 对象 | | |
objOutParams | 对象 | | |
var | 变体型 | | |
index | 整数型 | | |
index =
根据网卡描述找到Index (Description
)
如果真 (objWbemLocator.
创建 (“WbemScripting.SWbemLocator”,
))

objWMIService = objWbemLocator.
对象型方法 (“ConnectServer”,
“.”,
“\root\CIMV2”, , , , , ,
) 
如果真 (objWMIService.
是否为空 () =
假)

objShare = objWMIService.
对象型方法 (“Get”,
“Win32_NetworkAdapterConfiguration.Index='” +
到文本 (index
) +
“'”)

如果真 (objShare.
是否为空 () =
假)


objInParam = objShare.
读对象型属性 (“Methods_”,
).
对象型方法 (“Item”,
“EnableDHCP”).
读对象型属性 (“InParameters”,
).
对象型方法 (“SpawnInstance_”,
)






objOutParams = objShare.
对象型方法 (“ExecMethod_”,
“EnableDHCP”, objInParam
)


如果真 (objOutParams.
是否为空 () =
假)



var = objOutParams.
读对象型属性 (“Properties_”,
).
对象型方法 (“Item”,
“ReturnValue”).
读属性 (“value”,
)


调试输出 (“ReturnValue:”,
变体型类型 (var.
取类型 ()), var.
取数值 ())







objOutParams.
清除 ()

objShare.清除 ()
objWMIService.清除 ()
objWbemLocator.清除 ()
|
wmi_DNS设置为自动获取 | | |
|
Description | 文本型 | | | |
变量名 | 类 型 | 静态 | 数组 | 备 注 |
index | 整数型 | | |
objWbemLocator | 对象 | | |
objWMIService | 对象 | | |
objShare | 对象 | | |
objInParam | 对象 | | |
objOutParams | 对象 | | |
var | 变体型 | | |
index =
根据网卡描述找到Index (Description
)
如果真 (objWbemLocator.
创建 (“WbemScripting.SWbemLocator”,
))

objWMIService = objWbemLocator.
对象型方法 (“ConnectServer”,
“.”,
“\root\CIMV2”, , , , , ,
) 
如果真 (objWMIService.
是否为空 () =
假)

objShare = objWMIService.
对象型方法 (“Get”,
“Win32_NetworkAdapterConfiguration.Index='” +
到文本 (index
) +
“'”)

如果真 (objShare.
是否为空 () =
假)


objInParam = objShare.
读对象型属性 (“Methods_”,
).
对象型方法 (“Item”,
“SetDNSServerSearchOrder”).
读对象型属性 (“InParameters”,
).
对象型方法 (“SpawnInstance_”,
)






objOutParams = objShare.
对象型方法 (“ExecMethod_”,
“SetDNSServerSearchOrder”, objInParam
)


如果真 (objOutParams.
是否为空 () =
假)



var = objOutParams.
读对象型属性 (“Properties_”,
).
对象型方法 (“Item”,
“ReturnValue”).
读属性 (“value”,
)


调试输出 (“ReturnValue:”,
变体型类型 (var.
取类型 ()), var.
取数值 ())




objOutParams.
清除 ()

objShare.清除 ()
objWMIService.清除 ()
objWbemLocator.清除 ()
arr =
分割文本 (ip,
“.”,
)
判断 (取数组成员数 (arr
) ≠ 4
)
返回 (假)


计次循环首 (4, i
)
判断 (文本_是否为数字 (arr
[i
]) =
假 或 到整数 (arr
[i
]) < 0
或 到整数 (arr
[i
]) > 255
)
返回 (假)





计次循环尾 ()返回 (真)
作者: jingyi11023995 时间: 2024-3-27 15:35
.版本 2
' 返回代码解释:https://learn.microsoft.com/zh-cn/windows/win32/cimwin32prov/enablestatic-method-in-class-win32-networkadapterconfiguration#syntax
代码数组 = { 0, 1, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 100, 2147786788 }
代码解释数组 = { “成功完成,无需重启。”, “成功完成,需要重新启动。”, “此平台不支持方法。”, “未知失败。”, “子网掩码无效。”, “处理返回的实例时出错。”, “输入参数无效。”, “指定的网关超过 5 个。”, “IP 地址无效。”, “网关 IP 地址无效。”, “访问注册表以获取请求的信息时出错。”, “无效的域名。”, “主机名无效。”, “未定义主 WINS 服务器或辅助 WINS 服务器。”, “文件无效。”, “系统路径无效。”, “文件复制失败。”, “无效的安全参数。”, “无法配置 TCP/IP 服务。”, “无法配置 DHCP 服务。 ”, “无法续订 DHCP 租约。”, “无法释放 DHCP 租约。”, “适配器上未启用 IP。”, “适配器上未启用 IPX。”, “帧或网络编号边界错误。”, “无效的帧类型。”, “网络号码无效。”, “重复的网络号码。”, “参数超出边界。”, “访问被拒绝。”, “内存不足。”, “已存在。”, “找不到路径、文件或对象。”, “无法通知服务。”, “无法通知 DNS 服务。”, “接口不可配置。”, “并非所有 DHCP 租约都可以释放或续订。”, “适配器上未启用 DHCP。”, “未启用写入锁定。” }
作者: 一指温柔 时间: 2024-3-28 16:01
感谢分享
作者: wxd520abc 时间: 2024-4-17 20:49
感谢分享
作者: qq1056123185 时间: 2024-4-25 14:51
本帖最后由 qq1056123185 于 2024-4-25 14:52 编辑
我的哥,IEnumVARIANT_Next这个命令找不到啊~
能发一个完整的.e文件吗?感谢~
作者: jingyi11023995 时间: 2024-4-25 23:32
精易模块里面有!
作者: jacket12 时间: 2024-4-27 04:46
感谢楼主分享经验
作者: 高高小舟 时间: 2024-4-27 22:53
膜拜大佬
作者: cxswswswws 时间: 2024-5-6 14:52
感谢楼主分享经验
作者: 3708272 时间: 3 天前
感谢分享,已点赞收藏。
欢迎光临 精易论坛 (https://125.confly.eu.org/) |
Powered by Discuz! X3.4 |