Get-WmiObject — самый важный командлет для общих задач управления системой. Все ключевые настройки подсистемы доступны через службу WMI. Более того, служба WMI обрабатывает данные как объекты, сгруппированные в коллекции из одного или нескольких элементов. Поскольку оболочка Windows PowerShell также работает с объектами, в ней имеется конвейер, позволяющий одинаково обрабатывать отдельный объект или несколько объектов, общий доступ к службе WMI предоставляет возможность выполнять некоторые сложные задачи с небольшими затратами усилий.
В следующем примере показано, как собрать определенные сведения, применяя командлет Get-WmiObject к произвольному компьютеру. Значение параметра ComputerName задается точкой ., представляющей локальный компьютер. Здесь можно указать имя или IP-адрес, связанные с любым компьютером, к которому требуется получить доступ через службу WMI. Чтобы получить сведения о локальном компьютере, параметр -ComputerName. можно опустить.
Вывод настроек рабочего стола
Для начала рассмотрим команду, собирающую сведения о рабочих столах локального компьютера:
Get-WmiObject -Class Win32_Desktop -ComputerName .
Эта команда возвращает сведения обо всех рабочих столах, вне зависимости от их использования.
Примечание. | |
Сведения, возвращаемые некоторыми классами WMI, могут быть очень подробными и часто содержат метаданные о классе WMI. Поскольку имена большинства этих свойств метаданных начинаются двойным знаком подчеркивания, эти свойства можно отфильтровать с помощью командлета Select-Object. Чтобы выбрать свойства, начинающиеся с буквы, для параметра Property следует указать [a-z]*. Пример. |
Get-WmiObject -Class Win32_Desktop -ComputerName . | Select-Object -Property [a-z]*
Чтобы отфильтровать метаданные, направьте результаты команды Get-WmiObject команде Select-Object -Property [a-z]* с помощью оператора конвейера (|).
Вывод сведений о BIOS
Класс WMI Win32_BIOS возвращает довольно компактные и полные сведения о системной BIOS локального компьютера.
Get-WmiObject -Class Win32_BIOS -ComputerName .
Вывод сведений о процессоре
Общие сведения о процессоре можно получить с помощью класса Win32_Processor службы WMI, однако пользователю наверняка потребуется отфильтровать полученные данные.
Get-WmiObject -Class Win32_Processor -ComputerName . | Select-Object -Property [a-z]*
Чтобы получить общую строку описания семейства процессора, достаточно вернуть свойство Win32_ComputerSystem SystemType:
PS> Get-WmiObject -Class Win32_ComputerSystem -ComputerName . | Select-Object -Property SystemType SystemType ---------- X86-based PC
Вывод производителя и модели компьютера
Сведения о модели компьютера так же доступны в классе Win32_ComputerSystem. Чтобы получить данные изготовителя оборудования (OEM), стандартный отображаемый вывод фильтровать не нужно.
PS> Get-WmiObject -Class Win32_ComputerSystem Domain : WORKGROUP Manufacturer : Compaq Presario 06 Model : DA243A-ABA 6415cl NA910 Name : MyPC PrimaryOwnerName : Jane Doe TotalPhysicalMemory : 804765696
Вывод из команд, подобных показанной выше и возвращающих сведения напрямую от аппаратного обеспечения, не может быть дополнен. Иногда сведения неверно сконфигурированы производителем оборудования и недоступны для запроса.
Вывод установленных исправлений
Список всех установленных исправлений можно получить с помощью класса Win32_QuickFixEngineering:
Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName .
Этот класс возвращает список исправлений, представленный в следующем виде:
Description : Update for Windows XP (KB910437) FixComments : Update HotFixID : KB910437 Install Date : InstalledBy : Administrator InstalledOn : 12/16/2005 Name : ServicePackInEffect : SP3 Status :
Для получения более кратких сведений нужно исключить некоторые свойства. Параметр Get-WmiObject Property позволяет выбрать только идентификаторы HotFixID, однако на самом деле выполнение этой команды возвращает больше данных, поскольку по умолчанию отображаются все метаданные.
PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property HotFixId HotFixID : KB910437 __GENUS : 2 __CLASS : Win32_QuickFixEngineering __SUPERCLASS : __DYNASTY : __RELPATH : __PROPERTY_COUNT : 1 __DERIVATION : {} __SERVER : __NAMESPACE : __PATH :
Дополнительные данные выводятся, поскольку параметр Property командлета Get-WmiObject ограничивает свойства, возвращаемые из экземпляров класса, но не объекты, возвращаемые оболочке Windows PowerShell. Командлет Select-Object позволяет сократить возвращаемый вывод:
PS> Get-WmiObject -Class Win32_QuickFixEngineering -ComputerName . -Property Hot FixId | Select-Object -Property HotFixId HotFixId -------- KB910437
Вывод сведений о версии операционной среды
Свойства класса Win32_OperatingSystem включают сведения о версии операционной среды и пакета обновлений. Эти свойства можно выбрать явным образом, чтобы из класса Win32_OperatingSystem получить сводные данные о версиях:
Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property BuildNumber,BuildType,OSType,ServicePackMajorVersion,ServicePackMinorVersion
С параметром Select-Object Property можно использовать подстановочные символы. Поскольку в рассматриваемом случае важны все свойства, имена которых начинаются с Build либо с ServicePack, указанную строку можно сократить:
PS> Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property Build*,OSType,ServicePack* BuildNumber : 2600 BuildType : Uniprocessor Free OSType : 18 ServicePackMajorVersion : 2 ServicePackMinorVersion : 0
Вывод локальных пользователей и владельца
Общие сведения о локальных пользователях — количество зарегистрированных пользователей, текущее число пользователей и имя владельца — можно получить, выбрав соответствующие свойства класса Win32_OperatingSystem. Отображаемые свойства можно указать явным образом:
Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property NumberOfLicensedUsers,NumberOfUsers,RegisteredUser
В более сжатом варианте используются знаки подстановки:
Get-WmiObject -Class Win32_OperatingSystem -ComputerName . | Select-Object -Property *user*
Получение сведений о доступном месте на диске
Чтобы получить сведения о дисковом пространстве и свободном месте на всех локальных дисках, можно воспользоваться классом Win32_LogicalDisk службы WMI. Для просмотра следует выбрать только те экземпляры, у которых свойство DriveType принимает значение 3, — значение, используемое службой WMI для постоянных жестких дисков.
Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . DeviceID : C: DriveType : 3 ProviderName : FreeSpace : 65541357568 Size : 203912880128 VolumeName : Local Disk DeviceID : Q: DriveType : 3 ProviderName : FreeSpace : 44298250240 Size : 122934034432 VolumeName : New Volume PS> Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum Get-WmiObject -Class Win32_LogicalDisk -Filter "DriveType=3" -ComputerName . | Measure-Object -Property FreeSpace,Size -Sum | Select-Object -Property Property,Sum
Получение сведений о сеансах подключения
Общие сведения о сеансах подключения, связанных с пользователями, можно получить через класс Win32_LogonSession службы WMI:
Get-WmiObject -Class Win32_LogonSession -ComputerName .
Получение сведений о пользователе, подключенном к компьютеру
Имя пользователя, подключенного к определенной компьютерной системе, можно отобразить с помощью класса Win32_ComputerSystem. Приведенная ниже команда возвращает только пользователей, подключенных к рабочему столу системы:
Get-WmiObject -Class Win32_ComputerSystem -Property UserName -ComputerName .
Получение сведений о местном времени компьютера
Данные о текущем местном времени определенного компьютера можно получить с помощью класса Win32_LocalTime службы WMI. Поскольку этот класс по умолчанию отображает все метаданные, пользователю может потребоваться фильтрация с помощью командлета Select-Object:
PS> Get-WmiObject -Class Win32_LocalTime -ComputerName . | Select-Object -Property [a-z]* Day : 15 DayOfWeek : 4 Hour : 12 Milliseconds : Minute : 11 Month : 6 Quarter : 2 Second : 52 WeekInMonth : 3 Year : 2006
Отображение состояния службы
Для просмотра состояния всех служб на определенном компьютере можно локально воспользоваться командлетом Get-Service, как было показано ранее. Для удаленных систем можно использовать класс Win32_Service службы WMI. Если использовать команду Select-Object для получения результатов Status, Name и DisplayName, формат вывода будет идентичен формату вывода командлета Get-Service:
Get-WmiObject -Class Win32_Service -ComputerName . | Select-Object -Property Status,Name,DisplayName
Чтобы полностью отобразить службы с очень длинными именами, может потребоваться использование командлета Format-Table с параметрами AutoSize и Wrap, позволяющими оптимизировать ширину столбцов и переносить длинные имена на следующие строки вместо их усечения.
Get-WmiObject -Class Win32_Service -ComputerName . | Format-Table -Property Status,Name,DisplayName -AutoSize -Wrap