Powershell как удаленно узнать информацию о компьютере

от admin

Три запроса PowerShell для получения важной системной информации

Ниже приводятся три сценария, позволяющие получить некоторую информацию о клиентских и серверных машинах под управлением Windows. Сценарии созданы на базе PowerShell 2 и могут применяться к клиентским системам, начиная от Windows XP и выше, а также к серверам под управлением Windows Server 2003 и выше. Для использования PowerShell 2 рекомендуется установить Windows PowerShell PowerPack.

1. Определение исходного разрешения экрана

Если для установки той или иной программы требуется определенное разрешение экрана, выяснить разрешение локальной системы можно с помощью простой однострочной команды, показанной на рис. A. Получить сведения о разрешении нескольких мониторов таким способом нельзя.

Три запроса PowerShell для получения важной системной информации
Рисунок A

Эта команда PowerPack на данный момент не поддерживает работу с удаленными системами, что ограничивает возможности ее использования в обширных компьютерных сетях. В таком случае можно осуществить установку PowerPack при помощи групповой политики и выполнять команду на всех компьютерах локально. К ней также стоит добавить переменную для определения имени компьютера и записи данных в файл на локальной или удаленной системе:

2. Перечисление USB-устройств

Выяснить, какие USB-устройства подключены к системе, порой бывает не так-то просто. Системные администраторы проклинают тот день, когда производители компьютеров решили использовать USB вместо PS/2 для клавиатур и мышей. Ведь гораздо проще было бы применять общую политику для всех USB-устройств, не затрагивая средства ввода, подключенные через PS/2. Получить список USB-устройств, подключенных к серверу или рабочей станции, можно с помощью модуля PowerShell Get-USB. Пример вывода команды показан на рис. B. В строке «Заголовок» (Caption) значится «Blue Snowball» — это подключенный к системе микрофон.

Три запроса PowerShell для получения важной системной информации
Рисунок B

Таким способом администратор может получить список всех подключенных к компьютеру USB-устройств для последующего ограничения доступа к оборудованию. Сведения о подключенных USB-накопителях можно использовать при аудите политик.

В отличие от команды, описанной в первом пункте, этот сценарий можно без дополнительной подготовки использовать для сбора данных на удаленных системах. При использовании переменной -computername команда подключается к удаленному компьютеру и выдает те же результаты, которые могли бы быть получены при локальном выполнении. При этом на удаленные системы не нужно устанавливать PowerShell PowerPack, что весьма удобно. Полная команда приводится ниже:

3. Получение подробных сведений о процессоре

В наши дни инвентаризация процессоров на серверах, рабочих станциях и виртуальных машинах может стать довольно непростой задачей. Команда PowerShell Get-Processor позволяет централизованно получить информацию о количестве процессоров и процессорных ядер, доступных системе. Пример вывода команды показан на рис. C.

Три запроса PowerShell для получения важной системной информации
Рисунок C

В этом примере виртуальная машина располагает одним процессором, для которого указана модель и частота. Если опустить параметр -Computer, вывод команды будет включать результаты только для локальной системы. Для разных процессорных конфигураций выводятся разные сведения, сравнимые с теми, что можно получить при помощи традиционных утилит типа CPUID .

В аптечку администратора

Описанные сценарии позволяют администратору получить необходимый минимум информации о компьютерной рабочей среде. А какими функциями PowerShell для инвентаризации пользуетесь вы? Поделитесь своим опытом в комментариях!

Автор: Rick Vanover
Перевод SVET

Оцените статью: Голосов

PowerShell: примеры скриптов по сбору информации о компьютерах

PowerShell: примеры скриптов по сбору информации о компьютерах

Для начала рассмотрим команду, собирающую сведения о рабочих столах локального компьютера.

Эта команда возвращает сведения обо всех рабочих столах, вне зависимости от их использования.

Так как имена большинства этих свойств метаданных начинаются с Cim, эти свойства можно отфильтровать с помощью Select-Object . Укажите параметр -ExcludeProperty, используя «Cim*» как значение. Пример:

Чтобы отфильтровать метаданные, используйте оператор конвейера (|) для отправки результатов команды Get-CimInstance в Select-Object -ExcludeProperty «CIM*» .

Вывод сведений о BIOS

Класс WMI Win32_BIOS возвращает довольно компактные и полные сведения о системной BIOS локального компьютера:

Вывод сведений о процессоре

Общие сведения о процессоре можно получить с помощью класса Win32_Processor инструментария WMI, но вам, скорее всего, потребуется отфильтровать полученные данные:

Чтобы получить общую строку описания семейства процессора, достаточно вернуть свойство SystemType:

Вывод производителя и модели компьютера

Сведения о модели компьютера также доступны в Win32_ComputerSystem. Чтобы получить данные поставщика вычислительной техники (OEM), стандартные отображаемые выходные данные фильтровать не нужно:

Выходные данные из команд, подобных показанной выше и возвращающих сведения напрямую от аппаратного обеспечения, не могут быть дополнены. Иногда сведения неверно сконфигурированы производителем оборудования и недоступны для запроса.

Вывод установленных исправлений

Список всех установленных исправлений можно получить с помощью Win32_QuickFixEngineering:

Этот класс возвращает список исправлений в следующем виде:

Для получения более кратких сведений нужно исключить некоторые свойства. Параметр Property в Get-CimInstance позволяет выбрать только идентификаторы HotFixID, однако на самом деле возвращается больше данных, так как по умолчанию отображаются все метаданные:

Дополнительные данные выводятся, так как параметр Property в Get-CimInstance ограничивает свойства, возвращаемые из экземпляров класса WMI, но не объекты, возвращаемые оболочке PowerShell. Командлет Select-Object позволяет сократить возвращаемые выходные данные:

Вывод сведений о версии операционной среды

Свойства класса Win32_OperatingSystem включают сведения о версии операционной системы и пакета обновления. Эти свойства можно выбрать явным образом, чтобы получить сводные данные по версиям из Win32_OperatingSystem:

С параметром Property в Select-Object можно использовать подстановочные символы. Поскольку в рассматриваемом случае важны все свойства, имена которых начинаются с Build либо с ServicePack, указанную строку можно сократить:

Вывод локальных пользователей и владельца

Общие сведения о локальных пользователях — количество лицензированных пользователей, текущее число пользователей и имя владельца — можно получить, выбрав свойства класса Win32_OperatingSystem. Отображаемые свойства можно указать явным образом:

В более сжатом варианте используются подстановочные символы:

Получение сведений о доступном месте на диске

Чтобы получить сведения о дисковом пространстве и свободном месте на локальных дисках, можно воспользоваться классом Win32_LogicalDisk инструментария WMI. Для просмотра следует выбрать только те экземпляры, у которых свойство DriveType принимает значение 3, так как именно оно используется инструментарием WMI для постоянных жестких дисков.

Получение сведений о сеансах входа в систему

Общие сведения о сеансах входа в систему, связанных с пользователями, можно получить через класс Win32_LogonSession инструментария WMI:

Получение сведений о пользователе, выполнившем вход на компьютер

Имя пользователя, выполнившего вход на определенный компьютер, можно отобразить с помощью Win32_ComputerSystem. Приведенная ниже команда возвращает только пользователей, выполнивших вход на рабочий стол системы:

Получение сведений о местном времени компьютера

Сведения о текущем местном времени определенного компьютера можно получить с помощью класса Win32_LocalTime инструментария WMI.

Отображение состояния службы

Для просмотра состояния всех служб на определенном компьютере можно локально воспользоваться командлетом Get-Service . Для удаленных систем можно использовать класс Win32_Service инструментария WMI. Если использовать Select-Object для фильтрования Status, Name и DisplayName, формат вывода будет идентичен формату вывода командлета Get-Service :

Чтобы полностью отобразить службы с очень длинными именами, может потребоваться использовать командлет Format-Table с параметрами AutoSize и Wrap, позволяющими оптимизировать ширину столбцов и переносить длинные имена на следующие строки вместо их усечения:

Получение информации о системе с помощью PowerShell

Иногда требуется оперативно получить информацию о системе, например тип операционной системы, модель процессора, количество оперативной памяти и т.п. Cегодня я опишу пару способов получения системной информации с помощью PowerShell.

Читать:
Как составить уравнение плоскости по трем точкам

Systeminfo

Утилита командной строки Systeminfo выдает подробную информацию о системе, включая установленные обновления. Вывод утилиты не очень информативный, поэтому для удобства его можно отформатировать с помощью PowerShell. Для этого вывод оформляется в формате CSV, затем с помощью командлета ConvertFrom-Csv преобразуется в объект и помещается в переменную:

$systeminfo = systeminfo /FO csv | ConvertFrom-Csv

После такого преобразования необходимые параметры можно запрашивать как свойства объекта. Данные можно выводить как поодиночке, так и в виде списка. Например так можно узнать время последней перезагрузки компьютера:

$systeminfo.’System Boot Time’

А так информацию об установленной на нем операционной системе:

$systeminfo | fl OS*

получение системной информации с помощью systeminfo

Для получения данных с удаленного компьютера у systeminfo имеется ключ /S, также при необходимости можно указать имя пользователя (/U) и пароль (/P). Для примера выведем данные о потреблении памяти на компьютере testdc2:

$systeminfo = systeminfo /FO csv /S testdc2 /U administrator /P ′p@$$w0rd′ | ConvertFrom-Csv
$systeminfo | fl *memory

получение системной информации с помощью systeminfo на удаленном компьютере

Примечание. Если пароль содержит служебные символы (например знак $), то его необходимо заключать в одинарные кавычки. При использовании двойных кавычек будет выдана ошибка.

Windows Instrumentation Instrumentation (WMI) позволяет узнать практически любую информацию о компьютере. Базовую информацию о системе можно получить с помощью WMI-класса Win32_OperatingSystem (CIM_OperatingSystem). Для примера уточним данные об операционной системе:

$systeminfo = Get-CimInstance -ClassName Win32_OperatingSystem
$systeminfo | fl Caption, Version, BuildType, BuildNumber, InstallDate

получение системной информации с помощью WMI

Если требуется подробная информация об одном из компонентов системы, то можно использовать другие классы WMI. Перечисление и подробное описание классов WMI и CIM можно найти на MSDN, а мы для примера выведем свойства процессора с помощью класса Win32_Processor (CIM_Processor):

$cpuinfo = Get-CimInstance -ClassName CIM_Processor
$cpuinfo | fl Name, Description, Version

получение информации о CPU с помощью WMI

Для получения данных с удаленных систем можно в команде указать имя компьютера. Если компьютеров несколько, то имена указываются через запятую. Например:

$systeminfo = Get-CimInstance -ClassName CIM_OperatingSystem -ComputerName testdc1, testdc2
$systeminfo | ft PSComputerName, Caption, MUILanguages -a

получение системной информации с помощью WMI на удаленных машинах

Если же требуется указать учетные данные, то можно использовать другой подход. Сначала создаем удаленные сессии ко всем компьютерам, с которых надо получить данные:

$session = New-CimSession -ComputerName testdc1,testdc2 -Credential $(Get-Credential)

А затем используем созданные сессии для получения системной информации:

$systeminfo = Get-CimInstance -ClassName CIM_OperatingSystem -CimSession $session
$systeminfo | ft PSComputerName, Caption, MUILanguages -a

Получение сведений о компьютерах

Get-WmiObject — самый важный командлет для общих задач управления системой. Все ключевые настройки подсистемы доступны через службу WMI. Более того, служба WMI обрабатывает данные как объекты, сгруппированные в коллекции из одного или нескольких элементов. Поскольку оболочка Windows PowerShell также работает с объектами, в ней имеется конвейер, позволяющий одинаково обрабатывать отдельный объект или несколько объектов, общий доступ к службе WMI предоставляет возможность выполнять некоторые сложные задачи с небольшими затратами усилий.

В следующем примере показано, как собрать определенные сведения, применяя командлет Get-WmiObject к произвольному компьютеру. Значение параметра ComputerName задается точкой ., представляющей локальный компьютер. Здесь можно указать имя или IP-адрес, связанные с любым компьютером, к которому требуется получить доступ через службу WMI. Чтобы получить сведения о локальном компьютере, параметр -ComputerName. можно опустить.

Вывод настроек рабочего стола

Для начала рассмотрим команду, собирающую сведения о рабочих столах локального компьютера:

Эта команда возвращает сведения обо всех рабочих столах, вне зависимости от их использования.

Сведения, возвращаемые некоторыми классами WMI, могут быть очень подробными и часто содержат метаданные о классе WMI. Поскольку имена большинства этих свойств метаданных начинаются двойным знаком подчеркивания, эти свойства можно отфильтровать с помощью командлета Select-Object. Чтобы выбрать свойства, начинающиеся с буквы, для параметра Property следует указать [a-z]*. Пример.

Чтобы отфильтровать метаданные, направьте результаты команды Get-WmiObject команде Select-Object -Property [a-z]* с помощью оператора конвейера (|).

Вывод сведений о BIOS

Класс WMI Win32_BIOS возвращает довольно компактные и полные сведения о системной BIOS локального компьютера.

Вывод сведений о процессоре

Общие сведения о процессоре можно получить с помощью класса Win32_Processor службы WMI, однако пользователю наверняка потребуется отфильтровать полученные данные.

Чтобы получить общую строку описания семейства процессора, достаточно вернуть свойство Win32_ComputerSystem SystemType:

Вывод производителя и модели компьютера

Сведения о модели компьютера так же доступны в классе Win32_ComputerSystem. Чтобы получить данные изготовителя оборудования (OEM), стандартный отображаемый вывод фильтровать не нужно.

Вывод из команд, подобных показанной выше и возвращающих сведения напрямую от аппаратного обеспечения, не может быть дополнен. Иногда сведения неверно сконфигурированы производителем оборудования и недоступны для запроса.

Вывод установленных исправлений

Список всех установленных исправлений можно получить с помощью класса Win32_QuickFixEngineering:

Этот класс возвращает список исправлений, представленный в следующем виде:

Для получения более кратких сведений нужно исключить некоторые свойства. Параметр Get-WmiObject Property позволяет выбрать только идентификаторы HotFixID, однако на самом деле выполнение этой команды возвращает больше данных, поскольку по умолчанию отображаются все метаданные.

Дополнительные данные выводятся, поскольку параметр Property командлета Get-WmiObject ограничивает свойства, возвращаемые из экземпляров класса, но не объекты, возвращаемые оболочке Windows PowerShell. Командлет Select-Object позволяет сократить возвращаемый вывод:

Вывод сведений о версии операционной среды

Свойства класса Win32_OperatingSystem включают сведения о версии операционной среды и пакета обновлений. Эти свойства можно выбрать явным образом, чтобы из класса Win32_OperatingSystem получить сводные данные о версиях:

С параметром Select-Object Property можно использовать подстановочные символы. Поскольку в рассматриваемом случае важны все свойства, имена которых начинаются с Build либо с ServicePack, указанную строку можно сократить:

Вывод локальных пользователей и владельца

Общие сведения о локальных пользователях — количество зарегистрированных пользователей, текущее число пользователей и имя владельца — можно получить, выбрав соответствующие свойства класса Win32_OperatingSystem. Отображаемые свойства можно указать явным образом:

В более сжатом варианте используются знаки подстановки:

Получение сведений о доступном месте на диске

Чтобы получить сведения о дисковом пространстве и свободном месте на всех локальных дисках, можно воспользоваться классом Win32_LogicalDisk службы WMI. Для просмотра следует выбрать только те экземпляры, у которых свойство DriveType принимает значение 3, — значение, используемое службой WMI для постоянных жестких дисков.

Получение сведений о сеансах подключения

Общие сведения о сеансах подключения, связанных с пользователями, можно получить через класс Win32_LogonSession службы WMI:

Получение сведений о пользователе, подключенном к компьютеру

Имя пользователя, подключенного к определенной компьютерной системе, можно отобразить с помощью класса Win32_ComputerSystem. Приведенная ниже команда возвращает только пользователей, подключенных к рабочему столу системы:

Получение сведений о местном времени компьютера

Данные о текущем местном времени определенного компьютера можно получить с помощью класса Win32_LocalTime службы WMI. Поскольку этот класс по умолчанию отображает все метаданные, пользователю может потребоваться фильтрация с помощью командлета Select-Object:

Отображение состояния службы

Для просмотра состояния всех служб на определенном компьютере можно локально воспользоваться командлетом Get-Service, как было показано ранее. Для удаленных систем можно использовать класс Win32_Service службы WMI. Если использовать команду Select-Object для получения результатов Status, Name и DisplayName, формат вывода будет идентичен формату вывода командлета Get-Service:

Чтобы полностью отобразить службы с очень длинными именами, может потребоваться использование командлета Format-Table с параметрами AutoSize и Wrap, позволяющими оптимизировать ширину столбцов и переносить длинные имена на следующие строки вместо их усечения.

Related Posts