Что может быть хуже, чем иметь конкретные системные требования и совершенно не представлять, применимы ли они ко всем компьютерам в сети? Можно привести массу примеров такой ситуации — например, когда для установки программного обеспечения требуется выяснить количество свободного места на локальных компьютерах или узнать, какие версии JAVA или .NET установлены. А порой возникает потребность в данных, которые получить еще труднее.
Ниже приводятся три сценария, позволяющие получить некоторую информацию о клиентских и серверных машинах под управлением Windows. Сценарии созданы на базе PowerShell 2 и могут применяться к клиентским системам, начиная от Windows XP и выше, а также к серверам под управлением Windows Server 2003 и выше. Для использования PowerShell 2 рекомендуется установить Windows PowerShell PowerPack.
1. Определение исходного разрешения экрана
Если для установки той или иной программы требуется определенное разрешение экрана, выяснить разрешение локальной системы можно с помощью простой однострочной команды, показанной на рис. A. Получить сведения о разрешении нескольких мониторов таким способом нельзя.
Рисунок A
Эта команда PowerPack на данный момент не поддерживает работу с удаленными системами, что ограничивает возможности ее использования в обширных компьютерных сетях. В таком случае можно осуществить установку PowerPack при помощи групповой политики и выполнять команду на всех компьютерах локально. К ней также стоит добавить переменную для определения имени компьютера и записи данных в файл на локальной или удаленной системе:
Выяснить, какие USB-устройства подключены к системе, порой бывает не так-то просто. Системные администраторы проклинают тот день, когда производители компьютеров решили использовать USB вместо PS/2 для клавиатур и мышей. Ведь гораздо проще было бы применять общую политику для всех USB-устройств, не затрагивая средства ввода, подключенные через PS/2. Получить список USB-устройств, подключенных к серверу или рабочей станции, можно с помощью модуля PowerShell Get-USB. Пример вывода команды показан на рис. B. В строке «Заголовок» (Caption) значится «Blue Snowball» — это подключенный к системе микрофон.
Рисунок B
Таким способом администратор может получить список всех подключенных к компьютеру USB-устройств для последующего ограничения доступа к оборудованию. Сведения о подключенных USB-накопителях можно использовать при аудите политик.
В отличие от команды, описанной в первом пункте, этот сценарий можно без дополнительной подготовки использовать для сбора данных на удаленных системах. При использовании переменной -computername команда подключается к удаленному компьютеру и выдает те же результаты, которые могли бы быть получены при локальном выполнении. При этом на удаленные системы не нужно устанавливать PowerShell PowerPack, что весьма удобно. Полная команда приводится ниже:
В наши дни инвентаризация процессоров на серверах, рабочих станциях и виртуальных машинах может стать довольно непростой задачей. Команда PowerShell Get-Processor позволяет централизованно получить информацию о количестве процессоров и процессорных ядер, доступных системе. Пример вывода команды показан на рис. C.
Рисунок C
В этом примере виртуальная машина располагает одним процессором, для которого указана модель и частота. Если опустить параметр -Computer, вывод команды будет включать результаты только для локальной системы. Для разных процессорных конфигураций выводятся разные сведения, сравнимые с теми, что можно получить при помощи традиционных утилит типа CPUID.
В аптечку администратора
Описанные сценарии позволяют администратору получить необходимый минимум информации о компьютерной рабочей среде. А какими функциями PowerShell для инвентаризации пользуетесь вы? Поделитесь своим опытом в комментариях!