После запроса к классу MSStorageDriver_ATAPISmartData, в массиве VendorSpecific (который является свойством экземпляра указанного класса) нужно найти значение VendorSpecific(i) = 194 и запомнить индекс массива i. Элемент VendorSpecific(i+5) содержит значение температуры жесткого диска:
VBScript
'----------------------------------------
' Температура жестких дисков
' VBScript
'----------------------------------------
Option Explicit
Dim objService, objAcpi, obj
Dim i, lTemp
Set objService = GetObject("winmgmts:\\.\Root\WMI")
Set objAcpi = objService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData")
'----------------------------------------
For Each obj In objAcpi
For i = 0 To UBound(obj.VendorSpecific)
If obj.VendorSpecific(i) = 194 Then
WScript.Echo obj.GetObjectText_
WScript.Echo _
"Диск: " & obj.InstanceName & vbCRLF & _
"Температура: " & CStr(obj.VendorSpecific(i + 5)) & Chr(176) & " C"
Exit For
End If
Next
Next
Пример с периодическим опросом температуры жестких дисков и выводом данных в консоль:
VBScript
'----------------------------------------
' Получение температуры накопителей с
' отображением в консоли CScript
' VBScript
'----------------------------------------
Option Explicit
Dim oWshShell, objService, objAcpi, obj, u
Dim sF, sImage, b, sStr, i, j
Dim i1(10)
'--------------------------------------------------------
Set oWshShell = CreateObject("WScript.Shell")
' Запуск сценария консольным интерпретатором CScript
'--------------------------------------------------------
sF = CStr(WScript.FullName)
sImage = Right(sF,Len(sF)-InStrRev(sF, "\"))
If StrComp(UCase(sImage),"WSCRIPT.EXE") = 0 Then
oWshShell.Run "CScript.exe" & Chr(32) & """" & WScript.ScriptFullName & """", 1, False
WScript.Quit()
End If
' Получение температуры накопителей
'--------------------------------------------------------
Set objService = GetObject("winmgmts:\\.\Root\WMI")
b = False
sStr = vbNullString
While 1
WScript.StdOut.Write sStr
sStr = vbNullString
' Получение температуры накопителей
'-------------------------------------------------
Set objAcpi = objService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData")
For j = 0 To objAcpi.Count - 1
Set obj = objAcpi.ItemIndex(j)
If Not b Then
For i = 0 To UBound(obj.VendorSpecific) - 1
If obj.VendorSpecific(i) = 194 Then
i1(j) = i + 5
Exit For
End If
Next
End If
sStr = sStr & Time() & vbCRLF & _
"Диск: " & obj.InstanceName & vbCRLF & _
"Температура: " & CStr(obj.VendorSpecific(i1(j))) & Chr(176) & " C" & vbCRLF & vbCRLF
Set obj = Nothing
Next
b = True
Set objAcpi = Nothing
WScript.Sleep(3000)
' Очистка консоли (идея wisgest http://forum.script-coding.com/viewtopic.php?pid=80670#p80670)
'-------------------------------------------------
Set u = oWshShell.Exec("mode.com con: lines=0")
While u.Status = 0
WScript.Sleep(10)
Wend
Wend