Всем привет, с вами автор блога scriptcoding.ru. Сегодня мы рассмотрим класс Win32_BIOS, который позволяет просмотреть параметры BIOS (БИОС).
Класс Win32_BIOS позволяет получить информацию о параметрах BIOS (Базовая система ввода-вывода). По сути, данный класс не дает возможности как-то изменить значения параметров БИОСА, кроме того, все свойства класса Win32_BIOS доступны только для чтения, плюс, большинство из них унаследовано от других класса (будут указаны в круглых скобках).
Сам класс происходит от CIM_BIOSElement, ассоциативных связей нет, Win32_BIOS находится в пространстве имен rootCIMV2, файлы 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 и без компиляции прекрасно работают =))