VBScript для запроса значения пространства имен и, если%, то запустите X.bat - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь записать в VBScript процесс проверки пространства имен TPM на ПК (поскольку я считаю, что это невозможно в виде пакетного файла) и, если это версия 2.0, вернуть эхо-запрос «ДА», но пока он кажетсятолько возвращать значение ЛОЖЬ, хотя я знаю, что правильный результат - ИСТИНА (2.0, 0, 1.16).

Если я смогу получить "TPM SpecVersion" в своем операторе If, я в конечном итоге заставлю скрипт запустить утилиту понижения во время сборок PXE, но сейчас я просто использую echo, чтобы я мог получитьИдентификация версии TPM выяснена.

Это то, что я до сих пор взламывал (dev2.vbs):

Dim strTPM
strTPM = "wmic /namespace:\\root\cimv2\security\microsofttpm path win32_tpm get SpecVersion"

If strTPM = "%2.0%" Then
    WScript.Echo "YES"
Else
    WScript.Echo "Nup"
End If

Я знаю, что могу запустить запрос wmic в командной строке и получить правильную версию TPMно я не могу получить этот результат, чтобы правильно представить себя в этом сценарии.Я получаю эхо-всплывающее окно "Nup" каждый раз.

Я пробовал несколько альтернативных синтаксисов из онлайн-сценариев VBScripts, которые ссылаются на активные службы, включая следующие, но все они содержат ошибки и даже не дают ложного результата эха.

strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")

Set colServices = objWMIService.ExecQuery("SELECT * FROM Win32_TPM WHERE SpecVersion='%2.0%'")
For Each objtpm In colItem
    Return = objSpecVersion.Value()
    If Return = "%2.0%" Then
        WScript.Echo "YES YES YES"
    Else
        WScript.Echo "Nup"
    End If
Next

Может ли кто-нибудь помочь мне получить результаты поиска в пространстве имен для фильтрации до операторов If..Else под ним?

Я бы хотел избежать PowerShell, если смогу.

1 Ответ

0 голосов
/ 21 февраля 2019

Судя по вашей строке сравнения (%2.0%), вы пытаетесь выполнить частичное совпадение со строкой версии.Однако используемые вами операторы предназначены для точных совпадений.Не говоря уже о том, что ваш первый фрагмент кода вообще не может работать, потому что вы фактически никогда не выполняете определенную вами командную строку.

Измените условие фильтра в вашем WQL-запросе с SpecVersion='%2.0%' на SpecVersion LIKE '%2.0%', а также используйте правильную переменную (objtpm вместо неопределенного objSpecVersion), и код должен дать ожидаемый результат.

found = False
qry   = "SELECT * FROM Win32_TPM WHERE SpecVersion LIKE '%2.0%'"
For Each objtpm In objWMIService.ExecQuery(qry)
    found = True
Next

If found Then
    WScript.Echo "Yes"
Else
    WScript.Echo "No"
End If

Либо удалите предложение фильтра из запроса и выполните частичноесравнение с функцией InStr внутри цикла:

qry = "SELECT * FROM Win32_TPM"
For Each objtpm In objWMIService.ExecQuery(qry)
    specVerion = objtpm.SpecVersion
    If InStr(specVersion, "2.0") > 0 Then
        WScript.Echo "Yes"
    Else
        WScript.Echo "No"
    End If
Next
...