你好,AQ.实际上,我们的确 知道您为什么会得到一个“类型不匹配”错误,在使用 WMI 的 Win32_NetworkAdapterConfiguration 类的时候,这是一个常见错误。在您的脚本中,最有可能引起问题的一行代码是:
Wscript.Echo "IP Address:" & objItem.IPAddress
那么,究竟是什么问题呢?好,IPAddress 属性实际以数组形式进行存储;这就是为什么可以向单个网络适配器分配多个 IP 地址的原因。您将 IPAddress 当作一个字符串或者一个数值型变量加以使用,而实际并不是这样,数组是一个完全不同的数据类型。因此会出现“类型不匹配”错误。运行下面这个脚本,你可以得到同样的错误,这个脚本试图用“dog”乘以“cat”:
A = "dog" B = "cat" C = A * B
那现在我们知道问题所在了,解决办法是什么呢?办法实际很简单:只需要对 IPAddress 数组进行循环处理,并且显示找到的所有值就可以了。顺便说一句,大多数时候每个网络适配器只有一个 IP 地址,但是这并没有关系:无论是 1 个 IP 地址,100 个 IP 地址,或者是 0 个 IP 地址,都需要使用一个 For Each 循环,找出数组中的所有项目。您的脚本可以简化为以下的代码:
strComputer = "."
Set objWMIService = GetObject _
("winmgmts://" & strComputer & "/root/cimv2")
Set colItems = objWMIService.ExecQuery _
("Select * From Win32_NetworkAdapterConfiguration " & _
"Where IPEnabled = True")
For Each objItem in colItems
Wscript.Echo "Caption: " & objItem.Caption
For Each objAddress in objItem.IPAddress
Wscript.Echo "IP Address: " & objAddress
Next
Next
再奉送一个您没有问到的问题:我们怎么知道 IPAddress 以数组形式存储呢?嗯,“类型不匹配”错误为我们提供了一个好的线索,然后我们打开 Wbemtest 并找到 Win32_NetworkAdapterConfiguration 类,确认了这一点。正如您看到的下面这幅屏幕截图,的确是以数组形式存储的: