2013-01-23 107 views
1

我使用此頁面WMI的最後一個例子打印出一些Windows系統日誌信息: http://msdn.microsoft.com/en-us/library/aa394593(VS.85).aspx打印二進制數據的WScript

我也想打印出的二進制數據爲好,但我不確定如何在WScript中做到這一點。這是我修改後的代碼:

' test.vbs 
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") 
Set colLoggedEvents = objWMIService.ExecQuery _ 
    ("Select * from Win32_NTLogEvent " _ 
     & "Where Logfile = 'System' and SourceName = 'MySource'") 
For Each objEvent in colLoggedEvents 
    Wscript.Echo "Category: " & objEvent.Category & VBNewLine _ 
    & "Event Code: " & objEvent.EventCode & VBNewLine _ 
    & "Message: " & objEvent.Message & VBNewLine _ 
    & "Time Written: " & objEvent.TimeWritten & VBNewLine _ 
    & "Event Type: " & objEvent.Type & VBNewLine _ 
    & "Binary Data: " & objEvent.Data 
Next 

運行test.vbs當我從Windows腳本宿主此錯誤消息:

Error: Type mismatch, Code: 800A000D, Source: Microsoft VBScript runtime error

任何想法如何打印出數據爲十六進制字符串?

回答

1

.Data是一個整數值的數組(從它的外觀看來是小端編碼的寬字符)。你需要ChrW()每一對數字,並將它們連接到一個字符串,然後才能打印數據。像這樣的功能可能會起作用:

Function ToStr(arr) 
    ToStr = "" 
    For i = 0 To UBound(arr) Step 2 
    ToStr = ToStr & ChrW(arr(i) + arr(i+1)*256) 
    Next 
End Function 
+0

謝謝。這使我走上了正確的道路。我結束了這樣的代碼:
'函數BinaryToString(arrValue)
strInfo = 「」
對於i = 0至UBOUND(arrValue)
strInfo = strInfo&右(十六進制(arrValue(ⅰ)256), 2)
next
BinaryToString = strInfo
end function' –