Moin,
ich schreibe gerade ein Tool zur Abfrage von System- und Hardwareinformationen mittels WMI. Allerdings habe ich das Problem, dass manche Werte der Klassen nicht in allen Betriebssystemen vorhanden ist. So kann ich z.B. unter Windows 7 die HDD-Serial abfragen, unter Windows XP crashed das komplette Script mit der Rückgabe weiter unten.
Gibt es eine Möglichkeit, vor der Abfrage des Wertes zu überprüfen, ob dieser überhaupt vorhanden ist?
Hier die Fehlermeldung:
Zitat==> The requested action with this object has failed.:
$lResult = "HDD" & $i & "SerialNumber" & "|" & $objItem.SerialNumber
$lResult = "HDD" & $i & "SerialNumber" & "|" & $objItem.SerialNumber^ ERROR
>Exit code: 1
Und hier der Ausschnitt des Codes:
[autoit]
Func _EnumerateHardwareWmi(ByRef $lArray) ;
$wbemFlagReturnImmediately = 0x10
$wbemFlagForwardOnly = 0x20
$colItems = ""
$strComputer = "localhost"
$i = 0
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) then
For $objItem In $colItems
$i += 1
$lResult = "HDD" & $i & "InterfaceType" & "|" & $objItem.InterfaceType
_Array2DAdd($lArray, $lResult)
$lResult = "HDD" & $i & "SerialNumber" & "|" & $objItem.SerialNumber
_Array2DAdd($lArray, $lResult)
$lResult = "HDD" & $i & "MediaType" & "|" & $objItem.MediaType
_Array2DAdd($lArray, $lResult)
$lResult = "HDD" & $i & "Model" & "|" & $objItem.Model
_Array2DAdd($lArray, $lResult)
next
Else
_WriteDebug('ERR ;_EnumerateInstalledSoftwareWmi;No WMI Objects Found for class: "Win32_DiskDrive"')
SetError(1)
Endif
Danke Euch schon mal im Voraus.