Vbscript 将For Each循环中属性的值连接到一行输出

Vbscript 将For Each循环中属性的值连接到一行输出,vbscript,wmi,wmic,Vbscript,Wmi,Wmic,对不起,我的英语不好 在这里,在 我能够读取电池信息。但它只是单独的信息,所以我们如何将其组合并将结果导出到一行中 Dim strResult, objItem, arrayItem On Error Resume Next strComputer = "." Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") Set colItems = objWMIService.ExecQue

对不起,我的英语不好

在这里,在 我能够读取电池信息。但它只是单独的信息,所以我们如何将其组合并将结果导出到一行中

Dim strResult, objItem, arrayItem
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_Battery")
arrayItems = Array("Name", "Availability", "BatteryStatus", "Chemistry")
For Each objItem in colItems
     For Each arrayItem In arrayItems
        strResult = Join(objItem.Properties_(arrayItem))
    Next
    WScript.Echo strResult
Next

它显示输出的空结果。

您需要收集属性并将它们合并到字符串中

试试这个:

Option Explicit

Dim objItem, arrayItems, strComputer
Dim objWMIService, colItems, arrResult, i

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

'The third parameter 48 for 'ExecQuery' is the combination of wbemFlagForwardOnly + wbemFlagReturnImmediately
'see: https://docs.microsoft.com/en-us/windows/desktop/wmisdk/swbemservices-execquery#parameters
Set colItems = objWMIService.ExecQuery("Select * from Win32_Battery",,48)
arrayItems = Array("Name", "Availability", "BatteryStatus", "Chemistry")

For Each objItem in colItems
    'create/clear an array to store the various pieces of information
    ReDim arrResult(UBound(arrayItems))
    For i = 0 To (UBound(arrayItems))
        ' Sometimes the WMI property returns a Null value (Nothing)..
        If Not IsNull (objItem.Properties_(arrayItems(i))) Then
            arrResult(i) = objItem.Properties_(arrayItems(i))
        Else
            arrResult(i) = "Unknown"
        End If
    Next
    'as example I'm using the Tab character to join the pieces
    WScript.Echo Join(arrResult, Chr(9))
Next

删除错误恢复时的
下一步
开始。掩盖错误对你没有帮助。代码运行得很好。我真的希望你有足够的健康来支持人们。请不要在评论中再问其他问题。@Orion8我可以复制这个错误(在我的机器上使用Win32_卷和“Availability”属性)。事实证明,WMI可以为某些属性返回Null值,因此代码必须确保它可以处理这些属性。我已编辑我的答案以检查空值。