Сравните версию BIOS с фиксированным значением.

Вопрос или проблема

Добрый день всем,

Я ищу решение для проверки версии BIOS системы с помощью пакетного файла. В данный момент я уже ищу и тестирую 2 дня для решения.

Есть ли способ сравнить вывод команды wmic bios get smbiosbiosversion /value с фиксированным значением, например: SMBIOSBIOSVersion=R1EET58W(1.58 )

1. Обратите внимание на пробел SPACE перед ), который может быть простым пробелом или непечатаемым символом…

SMBIOSBIOSVersion=R1EET58W(1.58?)

2. В случае пустого пространства, это может быть зарезервированное пространство для составления последней цифры для версии в строке R1EET58W(X,YY,z)

3. Что вы можете сделать, так это сравнить результат в | findstr "STRINGS", заменив символ (непечатаемый или пробел) на . (подстановочный знак для любого символа) и, если предопределенная версия была найдена больше “.”, тогда вы можете (в случае &&), set "_ver=SameVersionFound" или, если не совпало (в случае ||), set "_ver=MoreRecentOrPreviousVersion с предопределенной версией, найденной. Что предлагается в - Код #1

4. Вы можете использовать прямые условные операторы && и ||, где, если версия, указанная в findstr, такая же && execute () или если она отличается || execute (). Что предлагается в - Код #2


– Код #1

for /f usebackq^tokens^=4delims^=^<^> %G in (`wmic bios get smbiosbiosversion /format:xml ^|find "VALUE"`)do @echo/"%~G"|findstr "R1EET58W(1\.58.)" >nul && @set "_ver=SameVersionFound %~G" || @set "_ver=MoreRecentOrPreviousVersion %~G" 


– Код #2

wmic bios get smbiosbiosversion /format:xml | find "VALUE" | findstr "R1EET58W(1\.58.)" >nul && ( set "_ver=SameVersionFound" command x... command y... ... command n... ) || ( set "_ver=MoreRecentOrPreviousVersion" command x... command y... ... command n... ) 


Некоторые дополнительные материалы для чтения:

wmic возвращает множество пустых строк, которые неудобно парсить. Powershell возвращает только строку версии, поэтому вы могли бы сделать что-то подобное в пакетном файле:

for /f "delims=" %i in ('powershell -c ^(Get-CimInstance win32_bios^).SMBIOSBIOSVersion') do set biosversion=%i IF "%biosversion%"=="1.2.3" echo "BIOS OK" 

или полностью на powershell:

if ((Get-CimInstance win32_bios).SMBIOSBIOSVersion -eq "1.2.3") {echo "BIOS OK"} 

.

Ответ или решение

Сравнение версии BIOS с фиксированным значением является важной задачей для ИТ-специалистов, особенно в контексте управления большим количеством систем. На первый взгляд, задача кажется довольно простой, но определенные особенности и нюансы могут сделать ее сложной, особенно если речь идет о скриптах и строковых операциях в командной строке Windows.

Теория

Первоначально необходимо понимать, как работает BIOS и зачем может понадобиться его версия. BIOS (Basic Input/Output System) — это базовая система ввода-вывода, которая отвечает за инициализацию оборудования при запуске системы. Версия BIOS может иметь значение для обеспечения стабильности системы и безопасности. Например, обновления BIOS могут устранять критические уязвимости или добавлять поддержку нового оборудования. Поэтому актуально знать, какая версия BIOS установлена на вашем оборудовании, и в случае необходимости сравнить ее с эталонной или рекомендуемой версией.

Пример

В качестве примера, давайте рассмотрим, как можно реализовать сравнение версии BIOS с помощью командных файлов (batch file) и PowerShell. В вопросе предложены два кода на языке командной строки Windows, которые используют wmic и findstr для сравнения с данной версией R1EET58W(1.58 ). Проблема в исходной версии команды заключается в необходимости учета пробелов и возможных непечатных символов внутри строки версии.

Код #1 использует for цикл для извлечения данных из wmic с последующим использованием findstr для сравнения:

for /f usebackq^tokens^=4delims^=^&lt;^&gt; %G in (`wmic bios get smbiosbiosversion /format:xml ^|find "VALUE"`)do @echo/"%~G"|findstr "R1EET58W(1\.58.)" >nul && @set "_ver=SameVersionFound %~G" || @set "_ver=MoreRecentOrPreviousVersion %~G"

Код #2 предлагает более прямолинейное использование условных операторов && и ||, что упрощает чтение и понимание:

wmic bios get smbiosbiosversion /format:xml | find "VALUE" | findstr "R1EET58W(1\.58.)" >nul && ( 
      set "_ver=SameVersionFound"
      command x... 
      command y... 
      ... 
      command n... 
   ) || ( 
      set "_ver=MoreRecentOrPreviousVersion"
      command x... 
      command y... 
      ... 
      command n... 
  )

Применение

На практике использование командной строки и PowerShell для управления системами является стандартной процедурой. Однако wmic может возвращать большое количество пустых строк, что вызывает сложности при парсинге. В более современных системах может быть предпочтительнее использовать PowerShell, который предлагает более лаконичные команды для извлечения информации о BIOS. Пример команд на PowerShell:

Командный файл с вызовом PowerShell:

for /f "delims=" %i in ('powershell -c ^(Get-CimInstance win32_bios^).SMBIOSBIOSVersion') do set biosversion=%i
IF "%biosversion%"=="1.2.3" echo "BIOS OK"

Полностью на PowerShell:

if ((Get-CimInstance win32_bios).SMBIOSBIOSVersion -eq "1.2.3") {echo "BIOS OK"}

Использование PowerShell предпочтительно для более современных и гибких решений, так как он поддерживает объекты, потоки данных и более сложные логические условия.

В результате, зная методологию сравнения версий BIOS, вы можете более эффективно управлять своим аппаратным парком, обеспечивая актуальность и безопасность ваших систем. Важно учесть все особенности техники, такие как пробелы и непечатные символы, и выбирать инструменты, которые наилучшим образом соответствуют вашим задачам и контексту.

Оцените материал
Добавить комментарий

Капча загружается...