Извиняюсь, если это кажется вопросом нуба ... но я не могу понять это для моей жизни. Я использую WQL для запроса WMI о версии Dell BIOS в последовательности задач в SCCM. Это WQL Query ниже:

select * from WIN32_BIOS where SMBIOSBIOSVersion < "1.10.5"

Достаточно просто. Этот шаг запустится (и установит последнюю версию BIOS Dell), если версия BIOS на компьютере, на котором выполняется последовательность, меньше текущей версии, 1.10.5. Короче говоря ... шаг не бежал. Итак, я приступил к расследованию.

На машине, на которой должна была выполняться последовательность задач, версия BIOS 1.7.3. Я открываю командную строку и запускаю следующее ...

wmic BIOS get SMBIOSBIOSVersion

Который возвращает 1.7.3. ОДНАКО ... когда я запускаю запрос WMIC ниже, я получаю "Нет доступных экземпляров"

C:\>wmic BIOS where "SMBIOSBIOSVersion < '1.10.5'" get SMBIOSBIOSVersion
No Instance(s) Available.

Выполнение запроса с «>» вместо «<» дает желаемый результат.

C:\>wmic BIOS where "SMBIOSBIOSVersion > '1.10.5'" get SMBIOSBIOSVersion
SMBIOSBIOSVersion
1.7.3

Я в тупике. 1.10.5 больше, чем 1.7.3 (ясно) даже в шестнадцатеричной форме (я проверил на случай, если это была какая-то странная аномалия).

Удаление одинарных кавычек не работает, так как запрос становится недействительным. (IE "SMBIOSBIOSVersion> 1.10.5")

Опять же, мои извинения, если это нубский вопрос. Я довольно новичок в WMI и делаю запросы с использованием WMIC и WQL. Мне не обязательно нужен правильный сценарий. Я действительно хочу точно знать, почему этот результат не так, как я ожидал.

1 ответ1

2

Как указано в комментариях, свойство SMBIOSBIOSVersion является строкой. Поэтому сравнения выполняются только по текстовым символам; числовое значение, представленное текстом, не учитывается. Например, строка 9 будет сортировать после 8 , но также и после 10 потому что 1 сортирует перед большими цифрами. (Возможно, актуально: таблица ASCII.)

При необходимости вы должны выполнить сравнение SMBIOSMajorVersion свойства SMBIOSMajorVersion и SMBIOSMinorVersion . Источник: Win32_BIOS на MSDN . Если вы в конечном итоге нужно проверить обоих, and оператор делает именно то , что вы ожидаете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .