Отримання інформації про систему за допомогою PowerShell.
Іноді потрібно оперативно отримати інформацію про систему, наприклад тип операційної системи, модель процесора, кількість оперативної пам'яті і т.п. Вчора я опишу пару способів отримання системної інформації за допомогою PowerShell.
Systeminfo
Утиліта командного рядка Systeminfo видає детальну інформацію про систему, включаючи встановлені оновлення.Висновок утиліти не надто інформативний, тому для зручності його можна відформатувати за допомогою PowerShell. Для цього висновок оформляється у форматі CSV, потім за допомогою командлета ConvertFrom-Csv перетворюється в об'єкт і поміщається в змінну:
$ systeminfo = systeminfo/FO csv | ConvertFrom-Csv
Після такого перетворення необхідні параметри можна запитувати як властивості об'єкта.Дані можна виводити як поодинці, так і у вигляді списку. Наприклад так можна дізнатися час останньої перезавантаження комп'ютера:
$ systeminfo.`System Boot Time`
А так інформацію про встановлену на ньому операційну систему:
$ systeminfo | fl OS *
Для отримання даних з віддаленого комп'ютера у systeminfo є ключ/S, також при необхідності можна вказати ім'я користувача (/ U) і пароль (/ P).Для прикладу виведемо дані про споживання пам'яті на комп'ютері testdc2:
$ systeminfo = systeminfo/FO csv/S testdc2/U administrator/P 'p @ $$ w0rd' | ConvertFrom-Csv
$ systeminfo | fl * memory
Примітка. Якщо пароль містить службові символи (наприклад знак $), то його необхідно укладати в одинарні лапки.При використанні подвійних лапок буде видана помилка.
WMI
Windows Instrumentation Instrumentation (WMI) дозволяє дізнатися практично будь-яку інформацію про комп'ютер. Базову інформацію про систему можна отримати за допомогою WMI-класу Win32_OperatingSystem (CIM_OperatingSystem). Для прикладу уточнимо дані про операційну систему:
$ systeminfo = Get-CimInstance -ClassName Win32_OperatingSystem
$ systeminfo | fl Caption, Version, BuildType, BuildNumber, InstallDate
Якщо потрібно детальна інформація про один з компонентів системи, то можна використовувати інші класи WMI.Перерахування та докладний опис класів WMI і CIM можна знайти на MSDN, а ми для прикладу виведемо властивості процесора за допомогою класу Win32_Processor (CIM_Processor):
$ cpuinfo = Get-CimInstance -ClassName CIM_Processor
$ cpuinfo | fl Name, Description, Version
Для отримання даних з віддалених систем можна в команді вказати ім'я комп'ютера .Якщо комп'ютерів кілька, то імена вказуються через кому. Наприклад:
$ systeminfo = Get-CimInstance -ClassName CIM_OperatingSystem -ComputerName testdc1, testdc2
$ systeminfo | ft PSComputerName, Caption, MUILanguages -a
Якщо ж потрібно вказати облікові дані, то можна використовувати інший підхід. Спочатку створюємо віддалені сесії до всіх комп'ютерів, з яких треба отримати дані:
$ session = New-CimSession -ComputerName testdc1, testdc2 -Credential $ (Get-Credential)
А потім використовуємо створені сесії для отримання системної інформації:
$ systeminfo = Get-CimInstance -ClassName CIM_OperatingSystem -CimSession $ session
$ systeminfo | ft PSComputerName, Caption, MUILanguages -a