Получаем доступ к WMI

Доступ в скриптах PowerShell к инструментарию управления Windows (WMI, Windows Management Instrumentation), дает почти неограниченные возможности по настройкам. С его помощью можно получать, устанавливать и контролировать практически любые системные параметры. Для работы с WMI в PowerShell используется командлет Get-WmiObject. Чтобы узнать все допустимые параметры, запускаем его со знаком вопроса. Команда «Get-WmiObject -List» выведет достаточно большой список всех доступных WMI-объектов, аналогично добавив «-List» при вызове определенного класса, увидим все возможные методы и свойства. Например, просмотрим список всех классов связанных с сетевыми настройками:

PS> Get-WmiObject -List | where {$_.name -match "net"}

Смотрим список доступных WMI объектов
Для примера получим настройки сетевых адаптеров:

PS> Get-WmiObject -Class Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE

В результате увидим таблицу со всеми настройками. Сохранить ее в файл, можно использовав стандартную функцию перенаправления, т.е. просто добавив в конец команды «> network.txt«. Кроме этого есть возможность форматированного вывода (подробнее Get-Help Export). При вызове директиву «-Class» можно опускать. Также следует помнить о клавише , если ее нажать при вводе параметров, она выведет доступный список, иначе показываются все файлы текущего каталога.
В скриптах часто нужен только один параметр из вызова, поэтому сократим вывод выбрав при помощи Select-Object только один пункт, например IP-адрес:

PS> Get-WmiObject Win32_NetworkAdapterConfiguration -Filter IPEnabled=TRUE | Select-Object -Property IPAddress
IPAddress
---------
{192.168.1.58} 
{192.168.159.1}

По умолчанию идет опрос локальной системы, но командлет Get-WmiObject принимает параметр «-ComputerName«, который используется, чтобы создать запрос к WMI другой системы, находящейся в местной сети. Точка после параметра (-ComputerName .) указывает на текущую машину. Например, произведем опрос свободного места на дисках в двух системах, результат сохраним в CSV файл:

PS> $machines = @("comp1", "comp1")
PS> $(foreach ($machine in $machines)
>>{
>>Get-WmiObject Win32_LogicalDisk | Select-Object -Property FreeSpace | Export-CSV c:\disks.csv
>>})

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

PS> Get-WmiObject win32_logicaldisk | Select-Object -Property FreeSpace | % {$_.freespace/1GB }

Аналогично просто получить список расшареных сетевых папок:

PS> Get-WmiObject Win32_Share
Name	Path		Description
----	----		----------- 
С$	С:\		Стандартный общий ресурс
IPC$			Удаленный IPC

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

PS> Get-WmiObject Win32_USBControllerDevice | Format-List Antecedent, Dependent

Используя Where/Where-Object, StatusCode, IF и другие операторы можно отобрать только те параметры, которые удовлетворяют определенным условиям.
Проверяем, жив ли компьютер в сети, если да получаем список процессов, иначе выводим сообщение:

PS> $computer = 192.168.1.100
PS> $ping = Get-WmiObject Win32_PingStatus -filter "Address='$computer'"
PS> if ($ping.StatusCode -eq 0) \\ статус "0" означает нормальное завершение
>>{
>>Get-Service 
>>}
>>else
>>{
>> Add-Content "$computer is not available"
>>}
>>}

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

PS> get-alias

По умолчанию довольно много алиасов, некоторые из них часто используются в скриптах. Например, вместо «Get-Process» можно ввести просто «gps«. Установить свой алиас очень просто:

PS> Set-Alias d Get-Date

Теперь чтобы вывести дату достаточно набрать в консоли «d«.
Если в скриптах некоторый код повторяется несколько раз, необходимо использовать функции. Описание функции достаточно просто:

function <имя> {<код>}

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

Теги: ,

Понравилась статья? Оставьте комментарий или подпишитесь на RSS рассылку.

Комментарии

Комментариев пока что нет

Оставить комментарий

(required)

(required)