开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1494|回复: 6
收起左侧

[改进提议] wmi对网络适配器设置

[复制链接]
结帖率:100% (6/6)
发表于 2024-3-27 15:27:36 | 显示全部楼层 |阅读模式   广东省茂名市
本帖最后由 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_枚举网卡描述和是否物理网卡整数型 Description,id从0开始
参数名类 型参考可空数组备 注
网卡描述数组文本型用于存放网卡描述的数组
是否物理网卡数组文本型-1是物理网卡,0是虚拟网卡
变量名类 型静态数组备 注
objWbemLocator对象 
objWMIService对象 
colClasses对象 
Properties对象 
NewEnum对象 
objClass对象 
hreslut整数型 
Variant变体型 
pcFetched整数型 
value文本型 
重定义数组 (网卡描述数组, 假, 0)
重定义数组 (是否物理网卡数组, 假, 0)
如果真 (objWbemLocator.创建 (“WbemScripting.SWbemLocator”, ))  ' 创建WMI对象
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)
value = Properties.对象型方法 (“Item”, “PhysicalAdapter”).读文本属性 (“value”, )
' 调试输出 (value)
加入成员 (是否物理网卡数组, value)
objClass.清除 ()
Variant.清除 ()
处理事件 ()
循环判断尾 (pcFetched = 1)
NewEnum.清除 ()
colClasses.清除 ()
objWMIService.清除 ()
objWbemLocator.清除 ()

调试输出 (网卡描述数组, 是否物理网卡数组)
返回 (取数组成员数 (网卡描述数组))


i支持库列表   支持库注释   
spec特殊功能支持库

  
子程序名返回值类型公开备 注
根据网卡描述找到Index整数型 
参数名类 型参考可空数组备 注
Description文本型
变量名类 型静态数组备 注
i整数型 
index整数型 
index = 0
计次循环首 (取数组成员数 (DescriptionArr), i)
判断 (DescriptionArr [i] = Description)
index = 到整数 (i - 1)
调试输出 (index, Description)
跳出循环 ()



计次循环尾 ()
返回 (index)


i支持库列表   支持库注释   
spec特殊功能支持库

  
子程序名返回值类型公开备 注
wmi_修改IP地址和网关和子网掩码和DNS文本型 修改IP地址和网关和子网掩码和DNS
参数名类 型参考可空数组备 注
Description文本型网卡描述 示例:"Realtek Gaming GbE Family Controller" 或 "TP-LINK Wireless USB Adapter"
IPAddress文本型IP地址 示例:{ “192.168.0.138” }
SubnetMask文本型掩码 示例:{ “255.255.255.0” }
Gateways文本型网关 示例:{ “192.168.0.1” }
DNS文本型主DNS 次DNS 示例:{ “202.96.128.86”, “202.96.128.166” }
变量名类 型静态数组备 注
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)
' https://learn.microsoft.com/zh-cn/windows/win32/cimwin32prov/win32-networkadapterconfiguration-methods
如果真 (objWbemLocator.创建 (“WbemScripting.SWbemLocator”, ))
' objWbemLocator.查看 ()
objWMIService = objWbemLocator.对象型方法 (“ConnectServer”, “.”, “\root\CIMV2”, , , , , , )  ' 连接服务器
如果真 (objWMIService.是否为空 ())
objShare = objWMIService.对象型方法 (“Get”, “Win32_NetworkAdapterConfiguration.Index='”到文本 (index)“'”)
如果真 (objShare.是否为空 ())
objInParam网址 = objShare.读对象型属性 (“Methods_”, ).对象型方法 (“Item”, “EnableStatic”).读对象型属性 (“InParameters”, ).对象型方法 (“SpawnInstance_”, )
' 设置IP:
' 添加输入参数
变体.赋值 (IPAddress, )  ' OK
bool = objInParam网址.对象型方法 (“Properties_”, ).对象型方法 (“Item”, “IPAddress”).写属性 (“value”, 变体)
调试输出 (objInParam网址.取错误 (), bool)
变体.赋值 (SubnetMask, )  ' OK
bool = objInParam网址.对象型方法 (“Properties_”, ).对象型方法 (“Item”, “SubnetMask”).写属性 (“value”, 变体)
调试输出 (objInParam网址.取错误 (), bool)
' 运行方法
objOutParams = objShare.对象型方法 (“ExecMethod_”, “EnableStatic”, objInParam网址)
如果真 (objOutParams.是否为空 ())
var = objOutParams.读对象型属性 (“Properties_”, ).对象型方法 (“Item”, “ReturnValue”).读属性 (“value”, )
调试输出 (“ReturnValue:”, 变体型类型 (var.取类型 ()), var.取数值 ())  ' 68:输入参数无效   97:接口不可配置   70:IP 地址无效
' https://learn.microsoft.com/zh-cn/windows/win32/cimwin32prov/enablestatic-method-in-class-win32-networkadapterconfiguration#syntax
objOutParams.清除 ()

' 网关:
objInParam网关 = objShare.读对象型属性 (“Methods_”, ).对象型方法 (“Item”, “SetGateways”).读对象型属性 (“InParameters”, ).对象型方法 (“SpawnInstance_”, )
变体.赋值 (Gateways, )  ' OK
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.取数值 ())  ' 68:输入参数无效   97:接口不可配置   70:IP 地址无效
' https://learn.microsoft.com/zh-cn/windows/win32/cimwin32prov/enablestatic-method-in-class-win32-networkadapterconfiguration#syntax
objOutParams.清除 ()

' DNS:
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.取数值 ())  ' 68:输入参数无效   97:接口不可配置   70:IP 地址无效  84:适配器上未启用 IP
' https://learn.microsoft.com/zh-cn/windows/win32/cimwin32prov/enablestatic-method-in-class-win32-networkadapterconfiguration#syntax
objOutParams.清除 ()

objShare.清除 ()
objWMIService.清除 ()
objWbemLocator.清除 ()

返回 (“”)
' 官方设置IP代码:
' strComputer = "."
' Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
' Set objShare = objWMIService.Get("Win32_NetworkAdapterConfiguration.Index='1'")
' Set objInParam = objShare.Methods_("EnableStatic")._inParameters.SpawnInstance_()
' objInParam.Properties_.Item("IPAddress") =  "192.168.1.138"
' objInParam.Properties_.Item("SubnetMask") =  "255.255.255.0"
' Set objOutParams = objWMIService.ExecMethod("Win32_NetworkAdapterConfiguration.Index='1'", "EnableStatic", objInParam)
' Wscript.Echo "Out Parameters: "
' Wscript.echo "ReturnValue: " & objOutParams.ReturnValue



i支持库列表   支持库注释   
spec特殊功能支持库

  
子程序名返回值类型公开备 注
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.取数值 ())
' 84适配器上未启用 IP
objOutParams.清除 ()
objShare.清除 ()
objWMIService.清除 ()
objWbemLocator.清除 ()


i支持库列表   支持库注释   
spec特殊功能支持库

  
子程序名返回值类型公开备 注
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.清除 ()


i支持库列表   支持库注释   
spec特殊功能支持库


  
子程序名返回值类型公开备 注
文本_是否IP格式逻辑型 
参数名类 型参考可空数组备 注
ip文本型
变量名类 型静态数组备 注
arr文本型0
i整数型 
arr = 分割文本 (ip, “.”, )
判断 (取数组成员数 (arr) ≠ 4)
返回 ()



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



计次循环尾 ()
返回 ()



结帖率:50% (4/8)

签到天数: 7 天

发表于 17 小时前 | 显示全部楼层   广东省深圳市
感谢楼主分享经验
回复 支持 反对

使用道具 举报

结帖率:100% (6/6)

签到天数: 13 天

 楼主| 发表于 前天 23:32 | 显示全部楼层   广东省茂名市
qq1056123185 发表于 2024-4-25 14:51
我的哥,IEnumVARIANT_Next这个命令找不到啊~
能发一个完整的.e文件吗?感谢~

精易模块里面有!
回复 支持 反对

使用道具 举报

结帖率:100% (17/17)

签到天数: 14 天

发表于 前天 14:51 | 显示全部楼层   山东省潍坊市
本帖最后由 qq1056123185 于 2024-4-25 14:52 编辑

我的哥,IEnumVARIANT_Next这个命令找不到啊~
能发一个完整的.e文件吗?感谢~


回复 支持 反对

使用道具 举报

签到天数: 7 天

发表于 2024-4-17 20:49:00 | 显示全部楼层   重庆市重庆市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 22 天

发表于 2024-3-28 16:01:18 | 显示全部楼层   广西壮族自治区玉林市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (6/6)

签到天数: 13 天

 楼主| 发表于 2024-3-27 15:35:31 | 显示全部楼层   广东省茂名市
.版本 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。”, “未启用写入锁定。” }
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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