Отредактировано: изменен ответ для соответствия отредактированному вопросу.Удаление кода Altiris.
Эй, я бы использовал следующий скрипт для получения необходимой информации.Это будет игнорировать ошибки при попытке получить информацию TPM через WMI.Поскольку класс Win32_Tpm
является одноэлементным классом, он может иметь только один экземпляр (имя WMI для результатов в классе).Вы заметите, что указано с помощью Win32_Tpm=@
.Когда этот код используется после имени класса, это означает возврат единственного экземпляра из этого класса.Когда вы это делаете, вам больше не нужен цикл For..Next
, потому что может быть возвращен только один объект.
On Error Resume Next
Dim TPMProvider : Set TPMProvider = GetObject("winmgmts:\\.\root\cimv2\Security\MicrosoftTpm:Win32_Tpm=@")
Wscript.Echo "Error: " & Err.number
On Error Goto 0 'This is optional and turns errors back on
Wscript.Echo "VarType: " & VarType(TPMProvider)
If VarType(TPMProvider) <> 9 Then
WScript.Echo "Setting Not Applicable when necessary"
Else
WScript.Echo TPMProvider.IsActivated_InitialValue
WScript.Echo TPMProvider.IsEnabled_InitialValue
WScript.Echo TPMProvider.IsOwned_InitialValue
WScript.Echo TPMProvider.ManufacturerId
WScript.Echo TPMProvider.ManufacturerVersion
WScript.Echo TPMProvider.ManufacturerVersionInfo
WScript.Echo TPMProvider.PhysicalPresenceVersionInfo
WScript.Echo TPMProvider.SpecVersion
End If
Некоторая дополнительная информация, которая может вам помочь, - это результаты err.number, которые наиболее вероятнои что означают эти ошибки.
Коды ошибок WMI (из https://docs.microsoft.com/en-us/windows/desktop/wmisdk/wmi-error-constants)
- -2147217405 = WBEM_E_ACCESS_DENIED - Доступ запрещен: текущий пользователь не имеет разрешениядля выполнения действия.
- -2147217406 = WBEM_E_NOT_FOUND - Невозможно найти объект
- -2147217394 = WBEM_E_INVALID_NAMESPACE - Указанное пространство имен не найдено.
- -2147217392_INAL_ID_ID_ID_WB =недопустимо
- -2147217375 = WBEM_E_INVALID_SYNTAX - запрос синтаксически недопустим
Вы также заметите, что я использую VarType в сценарии.данные переменная TPMProvider. Мы хотим, чтобы это был «тип объекта» (номер 9), чтобы продолжить, потому что это то, что успешный WMЯ бы возражал как.Если VarType равен 0 или 1, то установка переменной была неудачной.
Функция VarType (из https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/vartype-function)
vbEmpty 0 Empty (uninitialized)
vbNull 1 Null (no valid data)
vbInteger 2 Integer
vbLong 3 Long integer
vbSingle 4 Single-precision floating-point number
vbDouble 5 Double-precision floating-point number
vbCurrency 6 Currency value
vbDate 7 Date value
vbString 8 String
vbObject 9 Object
vbError 10 Error value
vbBoolean 11 Boolean value
vbVariant 12 Variant (used only with arrays of variants)
vbDataObject 13 A data access object
vbDecimal 14 Decimal value
vbByte 17 Byte value
vbLongLong 20 LongLong integer (valid on 64-bit platforms only)
vbUserDefinedType 36 Variants that contain user-defined types
vbArray 8192 Array