Всем привет, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим класс Win32_BIOS, который позволяет просмотреть параметры BIOS (БИОС).
Класс Win32_BIOS позволяет получить информацию о параметрах BIOS (Базовая система ввода-вывода). По сути, данный класс не дает возможности как-то изменить значения параметров БИОСА, кроме того, все свойства класса Win32_BIOS доступны только для чтения, плюс, большинство из них унаследовано от других класса (будут указаны в круглых скобках).
Сам класс происходит от CIM_BIOSElement, ассоциативных связей нет, Win32_BIOS находится в пространстве имен \root\CIMV2, файлы Cimwin32.mof и Cimwin32.dll, предоставляется провайдером Win32.
Прежде чем приступать к описанию свойств, давайте откроем утилиту WMI CIM Studio и изучим класс Win32_BIOS:
- Ключевое свойство Name
- Класс Win32_BIOS связан с Win32_ComputerSystem посредством ассоциативного класса Win32_SystemBios.
Если выбрать в левой панели Win32_BIOS и нажать в правой панели кнопку Instances, то мы получим список всех экземпляров, так как BIOS в системе только один, то и экземпляр будет в одном экземпляре. Двойной щелчок по экземпляру позволяет перейти к его описанию – информации о параметрах BIOS.
Теперь давайте рассмотрим, как можно вытянуть информацию о параметрах БИОСА с помощью утилиты командной строки WMIC.
Выводим информацию о свойствах и методах класса Win32_BIOS:
WMIC CLASS Win32_BIOS |
В виде таблицы получаем значения свойств экземпляров класса и направляем вывод во внешний файл:
WMIC PATH Win32_BIOS GET /FORMAT:HFORM>d:\work\info.htm |
Свойства Win32_BIOS – параметры БИОСА
BiosCharacteristics – Содержит массив характеристик параметров BIOS, поддерживаемых системой. Если какой-то параметр BIOS поддерживается, то возле его имени я поставлю плюс, если нет – минус. Массив может содержать следующие значения:
- 0, 1 – Зарезервировано.
- 2 – Неизвестно.
- 3 - BIOS характеристики "-".
- 4 - ISA "+".
- 5 - MCA "+".
- 6 - EISA "+".
- 7 - PCI "+".
- 8 - PC Card (PCMCIA) "+".
- 9 – Plug and Play "+".
- 10 - APM "+".
- 11 - BIOS является обновляемым (Flash).
- 12 - BIOS затенение разрешено.
- 13 - VL-VESA "+".
- 14 - ESCD поддержка доступна.
- 15 - Загрузка с CD "+".
- 16 - Выбор загрузки "+".
- 17 - BIOS ROM является Socketed.
- 18 - загрузки с PC Card (PCMCIA) "+".
- 19 - EDD (Enhanced Disk Drive) спецификация "+".
- 20 - INT 13h - Японский флоппи для NEC 9800 1.2MB (3.5, 1 Кбайт / Сектор, 360 оборотов в минуту) "+".
- 21 - INT 13h - Японский флоппи для Toshiba 1.2MB (3.5, 360 RPM) поддерживается.
- 22 - INT 13h - 5.25 / 360 Кб флоппи "+".
- 23 - INT 13h - 5.25 / 1,2 MB флоппи "+".
- 24 - INT 13h - 3,5 / 720 Кб флоппи "+".
- 25 - INT 13h - 3,5 / 2,88 Мб флоппи "+".
- 26 - INT 5h, Print Screen "+".
- 27 - INT 9h, 8042 Клавиатура "+".
- 28 - INT 14h, Serial "+".
- 29 - INT 17h, Принтер "+".
- 30 - INT 10h, CGA/Mono Видео "+".
- 31 - NEC PC-98.
- 32 - ACPI "+".
- 33 – Устаревшие USB "+".
- 34 - AGP "+".
- 35 - I2O загрузка "+".
- 36 - LS-120 загрузки "+".
- 37 - ATAPI ZIP Drive загрузка "+".
- 38 - 1394 загрузка "+".
- 39 - Smart Battery "+".
- 40-47 - Зарезервировано для поставщика BIOS.
- 48-63 - Зарезервировано для поставщика системы.
BIOSVersion – Свойство является массивом, и содержит информацию относительно параметров BIOS. Также, подобная информация хранится в системном реестре Windows.
BuildNumber – Содержит номер сборки, (CIM_SoftwareElement).
Caption – Краткое описание, (CIM_ManagedSystemElement)
CodeSet – Кодовая страница, (CIM_SoftwareElement).
CurrentLanguage - Название текущего языка BIOS.
Description – Описание, (CIM_ManagedSystemElement).
IdentificationCode – Идентификатор, установленный производителем, (CIM_ManagedSystemElement). Информация о параметрах БИОСА.
InstallableLanguages – Содержит информацию о количестве языков, доступных для установки. Язык может определять различные свойства, такие как необходимость поддержки Unicode или текста с иным направлением письма.
InstallDate – Дата установки, (CIM_ManagedSystemElement).
LanguageEdition – Языковая версия программного элемента, (CIM_SoftwareElement).
ListOfLanguages – Массив, который указывает список языков, поддерживаемых BIOS.
Manufacturer – Изготовитель, (CIM_SoftwareElement). БИОС параметры.
Name – Имя для идентификации, (CIM_ManagedSystemElement).
OtherTargetOS – изготовитель и тип операционной системы для программного элемента, если свойства TargetOperatingSystem содержит значение 1, в итоге, значение свойства OtherTargetOS должно быть непустым . Для всех других значений TargetOperatingSystem, значение свойства OtherTargetOS должно быть равно NULL, (CIM_SoftwareElement).
PrimaryBIOS – Если значение TRUE, то данный BIOS является основным, (CIM_BIOSElement).
ReleaseDate – Дата выпуска.
SerialNumber – Серийный номер, (CIM_SoftwareElement). Параметры БИОСА.
SMBIOSBIOSVersion – Номер версии BIOS, на основании данных полученных от SMBIOS.
SMBIOSMajorVersion – Основной номер версии SMBIOS. Значение этого свойства равно NULL, если SMBIOS не обнаружена.
SMBIOSMinorVersion – Дополнительный номер версии SMBIOS. Значение этого свойства равно NULL, если SMBIOS не обнаружена.
SMBIOSPresent – Указывает, используется ли SMBIOS на данном компьютере. Если значения TRUE, то SMBIOS используется. BIOS параметры.
SoftwareElementID – Идентификатор для данного программного элемента, информация о BIOS, (CIM_SoftwareElement).
SoftwareElementState – Состояние программного элемента, (CIM_SoftwareElement). Значения:
- 0 – Развертываемый (Deployable).
- 1 – Устанавливаемый (Installable).
- 2 – Исполняемый (Executable).
- 3 – Работает (Running).
Status – Текущий статус объекта, (CIM_ManagedSystemElement). Значения:
- OK.
- Error.
- Degraded.
- Unknown.
- Pred Fail.
- Starting.
- Stopping.
- Service.
- Stressed.
- NonRecover.
- No Contact.
- Lost Comm.
TargetOperatingSystem – Указывает целевую операционную систему для владеющего программного элемента, (CIM_SoftwareElement). Значения:
- 0 – Unknown.
- 1 – Other.
- 2 – MACOS.
- 3 – ATTUNIX.
- 4 – DGUX.
- 5 – DECNT.
- 6 - Digital Unix.
- 7 – OpenVMS.
- 8 – HPUX.
- 9 – AIX..
- 10 – MVS.
- 11 - OS400.
- 12 - OS/2.
- 13 – JavaVM.
- 14 – MSDOS.
- 15 - WIN3x.
- 16 - WIN95.
- 17 - WIN98.
- 18 – WINNT.
- 19 – WINCE.
- 20 - NCR3000.
- 21 – NetWare.
- 22 – OSF.
- 23 - DC/OS.
- 24 - Reliant UNIX.
- 25 - SCO UnixWare.
- 26 - SCO OpenServer.
- 27 – Sequent.
- 28 – IRIX.
- 29 – Solaris.
- 30 – SunOS.
- 31 - U6000.
- 32 – ASERIES.
- 33 – TandemNSK.
- 34 – TandemNT.
- 35 - BS2000.
- 36 – LINUX.
- 37 – Lynx.
- 38 – XENIX.
- 39 - VM/ESA.
- 40 - Interactive UNIX.
- 41 – BSDUNIX.
- 42 – FreeBSD.
- 43 – NetBSD.
- 44 - GNU Hurd.
- 45 - OS9.
- 46 - MACH Kernel.
- 47 – Inferno.
- 48 – QNX.
- 49 – EPOC.
- 50 – IxWorks.
- 51 – VxWorks.
- 52 – MiNT.
- 53 – BeOS.
- 54 - HP MPE.
- 55 – NextStep.
- 56 – PalmPilot.
- 57 – Rhapsody.
- 58 - Windows 2000.
- 59 – Dedicated.
- 60 – VSE.
- 61 – TPF.
Version – Версия BIOS, (CIM_SoftwareElement)
Примеры программного кода – параметры BIOS
Хорошо, с теоретической частью мы закончили, теперь можно приступить к программированию. Мы рассмотрим два простых примера программного кода на языке vbscript и jscript, которые будут выводить текущие параметры БИОС. Помним, что сценарии работают под управлением сервера Windows Script Host. После примеров я дам некоторые пояснения к ним.
Пример на языке VBScript:
'************************************************************** ' Параметры БИОСА ' Win32_BIOS.vbs '************************************************************** Option Explicit dim objWMIService, colItems, BIOSInfo, objItem ' Получаем доступ к инструментарию Windows Management Instrumentation Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2") ' выполняем WQL запрос и получаем коллекцию Set colItems = objWMIService.ExecQuery ("Select * from Win32_BIOS") BIOSInfo = "Параметры BIOS" & vbCrLf & vbCrLf For Each objItem in colItems With objItem BiosInfo = BiosInfo & "BiosCharacteristics: " & join(.BiosCharacteristics) & VbCrLf &_ "BiosVersion: " & join(.BiosVersion) & VbCrLf &_ "BuildNumber: " & .BuildNumber & VbCrLf &_ "Caption: " & .Caption & VbCrLf &_ "CodeSet: " & .CodeSet & VbCrLf &_ "CurrentLanguage: " & .CurrentLanguage & VbCrLf &_ "Description: " & .Description & VbCrLf &_ "IdentificationCode: " & .IdentificationCode & VbCrLf &_ "InstallableLanguages: " & .InstallableLanguages & VbCrLf &_ "InstallDate: " & .InstallDate & VbCrLf &_ "LanguageEdition: " & .LanguageEdition & VbCrLf &_ "ListOfLanguages: " & join(.ListOfLanguages) & VbCrLf &_ "Manufacturer: " & .Manufacturer & VbCrLf &_ "Name: " & .Name & VbCrLf &_ "OtherTargetOS: " & .OtherTargetOS & VbCrLf &_ "PrimaryBIOS: " & .PrimaryBIOS & VbCrLf &_ "ReleaseDate: " & .ReleaseDate & VbCrLf &_ "SerialNumber: " & .SerialNumber & VbCrLf &_ "SMBIOSBIOSVersion: " & .SMBIOSBIOSVersion & VbCrLf &_ "SMBIOSMajorVersion: " & .SMBIOSMajorVersion & VbCrLf &_ "SMBIOSMinorVersion: " & .SMBIOSMinorVersion & VbCrLf &_ "SMBIOSPresent: " & .SMBIOSPresent & VbCrLf &_ "SoftwareElementID: " & .SoftwareElementID & VbCrLf &_ "SoftwareElementState: " & .SoftwareElementState & VbCrLf &_ "Status: " & .Status & VbCrLf &_ "TargetOperatingSystem: " & .TargetOperatingSystem & VbCrLf &_ "Version: " & .Version & VbCrLf End With Next WScript.Echo BiosInfo |
Пример на языке JScript:
//************************************************************** // Параметры БИОСА // Win32_BIOS.vbs //************************************************************** var objWMIService, colItems, BIOSInfo, objItem, enumItems; // Получаем доступ к инструментарию Windows Management Instrumentation objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\\\.\\root\\cimv2"); // выполняем WQL запрос и получаем коллекцию colItems = objWMIService.ExecQuery ("Select * from Win32_BIOS"); BiosInfo = "Параметры BIOS\n\n"; enumItems = new Enumerator(colItems); for (; !enumItems.atEnd(); enumItems.moveNext()) { objItem = enumItems.item(); with(objItem){ try { BiosInfo += "BiosCharacteristics: " + (BiosCharacteristics.toArray()).join(",") + "\n"; }catch(e) { BiosInfo += "BiosCharacteristics: null\n"; } try { BiosInfo += "BIOSVersion: " + (BIOSVersion.toArray()).join(",") + "\n"; }catch(e) { BiosInfo += "BIOSVersion: null\n"; } BiosInfo += "BuildNumber: " + BuildNumber + "\n" + "Caption: " + Caption + "\n" + "CodeSet: " + CodeSet + "\n" + "CurrentLanguage: " + CurrentLanguage + "\n" + "Description: " + Description + "\n" + "IdentificationCode: " + IdentificationCode + "\n" + "InstallableLanguages: " + InstallableLanguages + "\n" + "InstallDate: " + InstallDate + "\n" + "LanguageEdition: " + LanguageEdition + "\n"; try { BiosInfo += "ListOfLanguages: " + (oListOfLanguages.toArray()).join(",") + "\n"; }catch(e) { BiosInfo += "ListOfLanguages: null\n"; } BiosInfo += "Manufacturer: " + Manufacturer + "\n"+ "Name: " + Name + "\n" + "OtherTargetOS: " + OtherTargetOS + "\n" + "PrimaryBIOS: " + PrimaryBIOS + "\n" + "ReleaseDate: " + ReleaseDate + "\n" + "SerialNumber: " + SerialNumber + "\n" + "SMBIOSBIOSVersion: " + SMBIOSBIOSVersion + "\n" + "SMBIOSMajorVersion: " + SMBIOSMajorVersion + "\n" + "SMBIOSMinorVersion: " + SMBIOSMinorVersion + "\n" + "SMBIOSPresent: " + SMBIOSPresent + "\n" + "SoftwareElementID: " + SoftwareElementID + "\n" + "SoftwareElementState: " + SoftwareElementState + "\n" + "Status: " + Status + "\n" + "TargetOperatingSystem: " + TargetOperatingSystem + "\n" + "Version: " + Version + "\n"; } } WScript.Echo(BiosInfo); |
Оба скрипта по своей природе очень просты. В самом начале происходит подключение к инструментарию Windows Management Instrumentation. Переменная colItems будет хранить ссылку на класс Win32_BIOS. Обратите внимание, что обработка переменной происходит по-разному, так,для перебора всех значение в языке VBSCRIPT мы использовали цикл FOR… EACH, а в JSCRIPT мы сначала применили внутренний объект Enumerator, сохранили данные в переменной enumItems, и уже потом использовали цикл FOR. Переменная BiosInfo будет хранить информацию о найденных параметрах BIOS, также стоит обратить внимание, что в сценарии на JSCRIPT для обработки массива нам пришлось использовать функцию join. Кроме того, тут мы включили обработку ошибок с помощью конструкции try… catch. В самом конце скрипта происходит вывод параметров БИОСА с помощью функции ECHO объекта WScript.
Спасибо за внимание. Автор блога Владимир Баталий
Это все чудесно )) А скомпилировать для народа? В экзешник какой-нибудь?
Скомпилировать в исполняемый файл конечно можно, есть даже утилиты, но..... в этом нет смысла. Кроме того, что сценарии Windows Script Host и без компиляции прекрасно работают.