我是vbscript和WMI的新手。 我写了脚本,它给出了运行时错误,我无法解决。 如果你有时间帮助我。
这是我的代码
Dim objWMIService
Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
set oXMLDoc = CreateObject("Microsoft.XMLDOM")
set oRoot = oXMLDoc.CreateElement("WIN32")
oXMLDoc.appendChild oRoot
set oRootChild = oXMLDoc.createElement("LOGICALDISK")
oRoot.appendChild oRootChild
Set LogicalDisk = objWMIService.ExecQuery ("Select * from Win32_LogicalDisk ")
for each objLogicalDisk in LogicalDisk
set oCaption = oXMLDoc.createElement("Caption")
oCaption.text = objLogicalDisk.Caption
oRootChild.appendChild oCaption
set oDescription = oXMLDoc.createElement("Description")
oDescription.text = objLogicalDisk.Description
oCaption.appendChild oDescription
set oSize = oXMLDoc.createElement("Size")
oSize.text = objLogicalDisk.Size
oCaption.appendChild oSize
set oFreeSpace = oXMLDoc.createElement("FreeSpace")
oFreeSpace.text = objLogicalDisk.FreeSpace
oCaption.appendChild oFreeSpace
set oFileSystem = oXMLDoc.createElement("FileSystem")
oFileSystem.text = objLogicalDisk.FileSystem
oCaption.appendChild oFileSystem
next
oXMLDoc.save "test.xml"
它给出了这个错误
C:\Users\XXXX\Desctop\41.vbs(27, 1) Microsoft VBScript runtime error: Type mismatch: 'oSize.text'
因为使用uint64类型而发生错误。(可能不是)
答案 0 :(得分:2)
您的问题是由Null值引起的。从像
这样的函数开始Function saveNull(vVal)
If IsNull(vVal) Then
saveNull = "<null>"
Else
saveNull = vVal
End If
End Function
并使用它:
...
set oSize = oXMLDoc.createElement("Size")
oSize.text = saveNull(objLogicalDisk.Size)
oCaption.appendChild oSize
...
WRT AMO1的结论:
空“可移动存储”驱动器既没有大小也没有文件系统(WMI通过返回Null报告的事实);检查描述以进/出特定的驱动器类型并不能解决问题,因为在这样的驱动器中插入媒体可以使这些信息可用。
答案 1 :(得分:1)
此错误是由于“具有可移动存储的设备”。我确定size
无效,FreeSpace
&amp; FileSystem
也无效。您可以通过添加If <condtion> then
来克服它。示例代码
set oSize = oXMLDoc.createElement("Size")
If objLogicalDisk.Description="Local Fixed Disk" Then
oSize.text = objLogicalDisk.Size
oCaption.appendChild oSize
End If