Иногда требуется оперативно получить информацию о системе, например тип операционной системы, модель процессора, количество оперативной памяти и т.п. Cегодня я опишу пару способов получения системной информации с помощью 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