Помогите обработать ошибку, избежав краха программы, если WMI запрос возвращает ошибку
В нижеприведённом примере запрос $objItem.NumberOfCores на некоторых компьютерах вызывает ошибку.
Собственно вопрос: что делать?
В нижеприведённом примере запрос $objItem.NumberOfCores на некоторых компьютерах вызывает ошибку.
И, если это случается нужно элементу массива $aProcessorInfo[$i][2] присвоить какое-н значение (например пробел)==> The requested action with this object has failed.:
$aProcessorInfo[$i][2] = $objItem.NumberOfCores
$aProcessorInfo[$i][2] = $objItem.NumberOfCores^ ERROR
Код:
Func _ComputerGetProcessors(ByRef $aProcessorInfo)
Local $colItems, $objWMIService, $objItem
Dim $aProcessorInfo[1][4], $i = 1
$objWMIService = ObjGet("winmgmts:\\" & $cI_Compname & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Processor", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
If IsObj($colItems) Then
For $objItem In $colItems
ReDim $aProcessorInfo[UBound($aProcessorInfo) + 1][5]
$aProcessorInfo[$i][0] = StringStripWS($objItem.Name, 1)
$aProcessorInfo[$i][1] = $objItem.ExtClock
$aProcessorInfo[$i][2] = $objItem.NumberOfCores
$aProcessorInfo[$i][3] = $objItem.SocketDesignation
$aProcessorInfo[$i][4] = $objItem.MaxClockSpeed
$i += 1
Next
$aProcessorInfo[0][0] = UBound($aProcessorInfo) - 1
If $aProcessorInfo[0][0] < 1 Then
SetError(1, 1, 0)
EndIf
Else
SetError(1, 2, 0)
EndIf
EndFunc
Собственно вопрос: что делать?