使用WMI并使用xml观察结果

时间:2012-03-10 14:19:46

标签: xml vbscript wmi

我是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类型而发生错误。(可能不是)

2 个答案:

答案 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