Интересные примеры на PowerShell. Использование Powershell для выполнения общих сетевых команд. Тестовый опрос компьютера с помощью PowerShell

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

Примечание! Данный справочник составлен на основе командлетов версии PowerShell 5.0 в операционной системе Windows Server 2016 .

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

Автоматически создавать скриншоты и сохранять на диск. Самый простой способ автоматизировать задачи - записывать нажатия клавиш с щелчками мыши, а затем воспроизводить их, когда вам нужно. Использование этой программы может быть довольно сложным в сценариях, но для этого требуется тщательное ознакомление с используемым в нем языком программирования. Подготовительная работа. Щелкните его правой кнопкой мыши и выберите «Редактировать этот скрипт». Он немедленно вносит все изменения в код. Без этой функции вам придется перезапустить скрипт или вызвать команду «Обновить этот сценарий» во всплывающем меню всякий раз, когда вы вносите какие-либо изменения в скрипт.

Полезные командлеты Windows PowerShell

В данном разделе я перечислю командлеты PowerShell, которые Вы точно будете использовать.

  • Get-Help – показывает справку по командлету, функции и общую справку по Windows PowerShell. Справка бывает нескольких типов: краткая, детальная, полная и вывод только примеров;
  • Update-Help - загружает и устанавливает новые файлы справки, т.е. обновление справки;
  • Get-Command – командлет поиска нужной команды, можно искать как по глаголу, так и по существительному, также возможно использование маски, если Вы не знаете точное наименование глагола или существительного;
  • Get-Alias – показывает псевдонимы, все или конкретной команды;
  • Get-PSDrive – показывает подключенные диски;
  • Get-Member – выводит свойства и методы, которые есть у объекта;
  • Get-WindowsFeature – выводит сведения о доступных ролях и компонентах сервера;
  • Install-WindowsFeature (эквивалентен Add-WindowsFeature ) - устанавливает роли или компоненты на указанный сервер;
  • Uninstall-WindowsFeature (эквивалентен Remove-WindowsFeature ) – удаляет роли или компонента сервера;
  • Get-History - возвращает список команд, введенных в ходе текущей сессии.

Работа с переменными

В PowerShell для того чтобы создать переменную, задать ей значение или получить это значение обычно используют знак доллар $ (коротко и удобно ), но для этих целей существуют специальные командлеты.

Два простых примера.

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

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

  • Get-Variable – выводит список переменных и их значения (или одну указанную переменную );
  • New-Variable – создает новую переменную;
  • Set-Variable – задает значение переменной. Если переменная с указанным именем не существует, то она будет создана;
  • Clear-Variable - удаляет значение переменной;
  • Remove-Variable - удаляет переменную и ее значение.

Форматирование в Windows PowerShell

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

  • Format-List – вывод результата команды в формате списка свойств, где на каждой новой строке отдельное свойство;
  • Format-Table - вывод результата команды в виде таблицы;
  • Format-Wide - вывод результата команды в виде широкой таблицы, в которой отображается только одно свойство каждого объекта;
  • Format-Custom – в данном случае форматирование вывода происходит с использованием пользовательского представления.

Импорт и экспорт

PowerShell позволяет импортировать и экспортировать данные в разных распространенных форматах, например, CSV или XML, а также перенаправлять вывод результата работы команды во внешний файл или на принтер.

  • Export-Csv – экспорт данных в формат CSV;
  • Import-Csv – импортирует данные из CSV файла;
  • Export-Clixml - экспорт данных в формат XML;
  • Import-Clixml - импортирует файл CLIXML и создает соответствующие объекты в оболочке Windows PowerShell;
  • Out-File - посылает вывод результата работы командлета во внешний файл (например, в TXT );
  • Out-Printer - вывод результата работы команды на принтер;
  • Import-Module - добавляет модули в текущей сессии.

Работа с сетью в Windows PowerShell

Для администрирования сети в Windows PowerShell существуют такие командлеты как:

  • Disable-NetAdapter – командлет отключает сетевой адаптер;
  • Enable-NetAdapter – данный командлет включает сетевой адаптер;
  • Rename-NetAdapter - переименовывает сетевой адаптер;
  • Restart-NetAdapter - перезапускает сетевой адаптер;
  • Get-NetIPAddress – выводит информацию о конфигурации IP-адреса;
  • Set-NetIPAddress - изменяет конфигурацию IP-адреса;
  • New-NetIPAddress - создает и настраивает IP-адрес;
  • Remove-NetIPAddress - удаляет IP-адрес и его конфигурацию;
  • Get-NetRoute - выводит таблицу маршрутизации IP;
  • Set-NetRoute - изменяет таблицу маршрутизации IP;
  • New-NetRoute - создает запись в таблице маршрутизации IP;
  • Remove-NetRoute - удаляет одну или несколько записей (IP маршрутов ) из таблицы маршрутизации IP;
  • Get-NetIPv4Protocol - выводит информацию о конфигурации протокола IPv4;
  • Get-NetIPv6Protocol - выводит информацию о конфигурации протокола IPv6;
  • Get-NetIPInterface - выводит информацию о свойствах интерфейса IP;
  • Get-NetTCPSetting - показывает информацию о настройках и конфигурации TCP;
  • Test-Connection – командлет посылает ICMP пакеты к одному или нескольким компьютерам, т.е. «пингует » компьютеры.

Работа с элементами

В Windows PowerShell есть командлеты, которые умеют работать с элементами, под элементами здесь можно понимать: файлы, папки, ключи реестра и так далее.

  • Clear-Item - очищает содержимое элемента, но не удаляет сам элемент;
  • Copy-Item – копирует элемент;
  • Get-Item - получает элемент в указанном месте;
  • Invoke-Item - выполняет действие по умолчанию над указанным элементом;
  • Move-Item – перемещает элемент;
  • New-Item – создает новый элемент;
  • Remove-Item – удаляет указанные элементы;
  • Rename-Item - переименовывает элемент в пространстве имен поставщика Windows PowerShell;
  • Set-Item - изменяет элемент;
  • Get-ChildItem - возвращает элементы и дочерние элементы в одном или нескольких определенных местах;
  • Get-Location – выводит информацию о текущем местонахождении.

Командлеты для работы с Active Directory (AD)

Windows PowerShell, конечно же, позволяет работать со службой каталогов Active Directory. Для этих целей существует немало командлетов, вот некоторые из них:

  • New-ADUser – создание нового пользователя в Active Directory;
  • Get-ADUser – выводит информацию о пользователях Active Directory;
  • Set-ADUser - изменяет пользователя Active Directory;
  • Remove-ADUser - удаляет пользователя Active Directory;
  • New-ADGroup – командлет создает группу в Active Directory;
  • Get-ADGroup – выводит информацию о группе или выполняет поиск, чтобы получить несколько групп из Active Directory;
  • Set-ADGroup – командлет изменяет группу в Active Directory;
  • Remove-ADGroup - удаление группы в Active Directory;
  • Add-ADGroupMember - командлет добавляет учетные записи пользователей, компьютеров или групп в качестве новых членов группы Active Directory;
  • Get-ADGroupMember - выводит информацию о членах группы Active Directory;
  • Remove-ADGroupMember - удаление элементов из группы Active Directory;
  • Set-ADAccountPassword - сброс пароля учетной записи Active Directory;
  • Disable-ADAccount - отключает учетную запись Active Directory.
  • Enable-ADAccount - включает учетную запись Active Directory;
  • Unlock-ADAccoun - разблокирует учетную запись Active Directory;
  • New-ADComputer - создание новой учетной записи компьютера в Active Directory;
  • Get-ADComputer - выводит информацию об одном или нескольких компьютерах в Active Directory;
  • Set-ADComputer - изменение учетной записи компьютера в Active Directory;
  • Remove-ADComputer - удаление компьютера из Active Directory.

Работа с Hyper-V

Для работы с Hyper-V в Windows PowerShell существует много командлетов, вот небольшой перечень:

  • New-VM - создание новой виртуальной машины;
  • Set-VM - настройка виртуальной машины;
  • Start-VM - запуск виртуальной машины;
  • Stop-VM - закрытие, выключение или сохранение виртуальной машины;
  • Import-VM - импорт виртуальной машины из файла;
  • Move-VM - перемещение виртуальной машины на новый Hyper-V хост;
  • Remove-VM - удаление виртуальной машины;
  • Rename-VM - переименование виртуальной машины;
  • New-VHD - создание одного или нескольких новых виртуальных жестких дисков;
  • Set-VHD – настройка виртуального жесткого диска;
  • Test-VHD - тестирование виртуального жесткого диска на предмет обнаружения проблем, которые сделали бы его непригодным для использования;
  • Add-VMDvdDrive - добавляет DVD диск к виртуальной машине;
  • Remove-VMDvdDrive - удаляет DVD-диск из виртуальной машины;
  • Add-VMHardDiskDrive - добавляет жесткий диск к виртуальной машине;
  • Remove-VMHardDiskDrive - удаляет один или несколько виртуальных жестких дисков (VHD) из виртуальной машины;
  • Add-VMNetworkAdapter - добавляет виртуальный сетевой адаптер на виртуальной машине;
  • Remove-VMNetworkAdapter - удаляет один или несколько виртуальных сетевых адаптеров из виртуальной машины;
  • Copy-VMFile - копирование файлов на виртуальную машину;
  • Get-VMVideo – выводит информацию о настройках видео для виртуальных машин;
  • Move-VMStorage - перемещение хранилища виртуальной машины.

Работа с фоновыми заданиями

В Windows PowerShell есть возможность запускать задачи в фоновом режиме, для того чтобы, не дожидаясь окончания работы команды (для случаев, когда задача выполняется долго ), продолжать работать в текущей сессии. Для работы с фоновыми заданиями в PowerShell есть следующие командлеты:

  • Start-Job – запустить фоновую задачу;
  • Stop-Job – остановить фоновую задачу
  • Get-Job – посмотреть список фоновых задач;
  • Receive-Job – посмотреть результат выполнения фоновой задачи;
  • Remove-Job – удалить фоновую задачу;
  • Wait-Job – перевести фоновую задачу на передний план, для того чтобы дожидаться ее окончания.

Работа с объектами

Так как PowerShell работает с объектами, он позволяет выполнять некие действия над этими объектами, например:

  • Measure-Object – командлет позволяет рассчитывать на основе свойств объектов такие числовые агрегирующие параметры как: минимальное, максимальное, среднее значение, сумму и количество. Например, Вы хотите узнать максимальный или средний размер файла в определенном каталоге, или просто узнать количество файлов (запущенных процессов, служб и так далее );
  • Select-Object – с помощью данного командлета можно выбрать определенные объекты или свойства этих объектов, например Вы хотите выводить только название файла и его размер;
  • Sort-Object - сортирует объекты по значениям свойств;
  • Where-Object – командлет для того чтобы ставить условие для выборки объектов на основе значений их свойств;
  • Group-Object – группирует объекты, которые содержат одинаковое значение для заданных свойств;
  • ForEach-Object – перебор объектов с целью выполнения определенной операции над каждым из этих объектов.

Командлеты PowerShell для удаленного управления

С помощью Windows PowerShell можно выполнять команды не только на локальном компьютере, но и на одном или даже на нескольких удаленных компьютерах.

  • Enter-PSSession - запускает интерактивный сеанс с удаленным компьютером;
  • Exit-PSSession - завершает интерактивный сеанс с удаленным компьютером;
  • New-PSSession - создает постоянное подключение к локальному или удаленному компьютеру;
  • Remove-PSSession - закрывает один или несколько сеансов Windows PowerShell;
  • Disconnect-PSSession - отсоединяется от сеанса;
  • Connect-PSSession - подключается к отключенным сеансам;
  • Get-PSSession - получает сеансы Windows PowerShell на локальных и удаленных компьютерах;
  • Invoke-Command - выполняет команды на локальном и удаленных компьютерах.

Работа со службами и процессами

PowerShell, конечно же, умеет управлять службами и процессами в Windows, для этого существуют такие командлеты как:

  • Get-Process – выводит информацию о запущенных процессах на компьютере;
  • Start-Process – запускает один или несколько процессов на компьютере;
  • Stop-Process - останавливает один или несколько запущенных процессов;
  • Get-Service – выводит информацию о службах;
  • Restart-Service – перезапускает службу;
  • Start-Service – запускает службу;
  • Stop-Service - останавливает службу;
  • Suspend-Service – приостанавливает работу службы;
  • Set-Service – с помощью данного командлета можно изменить свойства службы, например, описание, отображаемое имя и режим запуска. Также его можно использовать для запуска, остановки или приостановки службы.

Работа с компьютером

Windows PowerShell позволяет выполнять административные задачи для операционной системы и компьютера в целом, например, перезапустить операционную систему или переименовать компьютер.

  • Restart-Computer – командлет перезапускает операционную систему (перезагружает компьютер );
  • Stop-Computer – выключает компьютер;
  • Rename-Computer – переименовывает компьютер;
  • Checkpoint-Computer - создает точку восстановления системы на локальном компьютере;
  • Restore-Computer - запускает восстановление системы на локальном компьютере;
  • Disable-ComputerRestore - отключает функцию восстановления системы на указанном диске файловой системы;
  • Enable-ComputerRestore - включает функцию восстановления системы на указанном диске файловой системы;
  • Remove-Computer - удаляет локальный компьютер из домена;
  • Get-EventLog – выводит информацию о событиях в журнале событий, или список журналов событий на локальном или удаленном компьютере;
  • Clear-EventLog - удаляет записи из указанных журналов событий.

Работа с контентом

Для управления контентом, например, текстом в файле в Windows PowerShell существуют специальные командлеты, такие как:

  • Get-Content – получает содержимое элемента (например, считывает файл );
  • Add-Content – добавляет содержимое в заданные элементы, например, текст в файл;
  • Clear-Content - удаляет содержимое элемента, но не удаляет сам элемент;
  • Set-Content - записывает или заменяет содержимое в элемент с новым содержанием.

Другие командлеты Windows PowerShell

Также хотелось бы выделить следующие командлеты Windows PowerShell, которые наверняка Вам понадобятся и будут полезны.

  • Get-ExecutionPolicy – с помощью данного командлета можно узнать действующую политику выполнения Windows PowerShell для текущего сеанса;
  • Set-ExecutionPolicy – командлет изменяет политику выполнения Windows PowerShell;
  • Write-Host – выводит информацию на экран (пишет текст );
  • Read-Host – считывает строку ввода из консоли;
  • Write-Warning – выводит предупреждающее сообщение;
  • Write-Error – командлет объявляет ошибку и выводит ее в поток ошибок;
  • Get-Date – возвращает текущую дату и время;
  • Set-Date – командлет изменяет системную дату и время на компьютере.

Вот мы с Вами и рассмотрели полезные и часто используемые командлеты Windows PowerShell, надеюсь, этот справочник будет Вам полезен, удачи!

Наш обзор посвящен использованию ключевых возможностей Windows PowerShell для выполнения различных административных задач. Сначала рассмотрим встроенные средства ознакомления с возможностями Windows PowerShell.

Знакомство с возможностями Windows PowerShell

Итак, вы - администратор, которому необходимо в кратчайший срок освоить Windows PowerShell. Первое, что вы, вероятно, предпримете (естественно, помимо обращения к документации и справочной системе), - воспользуетесь командой Help (рис. 1).

Внимательно изучив выведенную на экран информацию, мы придем к пониманию следующих концептуальных вещей: в Windows PowerShell существуют алиасы, командлеты, провайдеры, а также справочные файлы. Алиасы (alias) служат для упрощения ввода команд (например, clc - это алиас команды Clear-Content ), командлеты (cmdlet) представляют собой реализацию всех встроенных в Windows PowerShell команд, провайдеры (provider) обеспечивают доступ к файловой системе, реестру, хранилищу сертификатов и т.п., а справочные файлы (helpfile) используются для получения дополнительной информации. Для получения подробного описания команды применяется следующий синтаксис:

PS C:> Help Get-Command

В результате выполнения этой команды мы получим полное описание команды Get-Command , включая ее назначение, синтаксис, опции и т.п. (рис. 2).


Для получения списка всех встроенных команд используем следующий синтаксис:

PS C:> Get-Command

Обратите внимание на то, что все команды состоят из глагола и прилагательного (например, Get-Content , Export-Console ) и все команды поддерживают единую систему именования - например для завершения чего-либо всегда используется глагол Stop, а не Kill, Terminate, Halt или другие синонимы, что существенно упрощает изучение возможностей PowerShell (рис. 3).


Команда Get-Service служит для получения списка всех сервисов, запущенных на данном компьютере. Например,

PS C:> Get-Service

возвращает список, представленный на рис. 4.


Для получения списка процессов, запущенных в настоящий момент на компьютере, применяется команда Get-Process (рис. 5):


PS C:> Get-Process

В Windows PowerShell поддерживается автоматическое завершение ввода. Чтобы убедиться в этом, введите Get-P и нажмите клавишу TAB: вы получите возможность выбора всех команд, начинающихся с введенных символов.

Для получения информации только об одном процессе в качестве аргумента команды Get-Process задается имя этого процесса (рис. 6):

PS C:> Get-Process explorer

Для того чтобы получить список всех процессов, названия которых начинаются с определенного символа, достаточно указать этот символ и «*» (рис. 7):


PS C:> Get-Process i*

Обратите внимание на колонки, в которых содержится информация, - Handles, NMP(K) и т.п. По умолчанию информация выводится в виде таблицы, но на самом деле все команды возвращают объекты. Эти объекты могут быть переданы на вход другим командам с помощью символа «|» (рис. 8):


PS C:> Get-Process i* | format-list

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

PS C:> Help format *

Другие возможные форматы:

PS C:> Get-Process i* | format-wide

PS C:> Get-Process i* | format-custom

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

PS C:> Get-Process | where {$_.handlecount -gt 400}

или сортировки:

PS C:> Get-Process | where {$_.handlecount -gt 400} | sort-object Handles

Может возникнуть вполне резонный вопрос: а откуда мы узнали, что у объекта, описывающего процесс, есть свойство handlecount ? Для получения списка всех свойств объекта применяется следующая команда (рис. 9):


PS C:> Get-Process | Get-Member

Выполним команду Get-Process | Get-Member Company - при форматировании по умолчанию невозможно получить желаемые данные. Преобразуем полученную команду в:

PS C:> Get-Process | Get-Member Company | Format-List

Результат ее преобразования представлен на рис. 10.


PS C:> Get-Process | sort-object Company | format-table -Group Company name, description, handles

Результат выполнения данной команды представлен на рис. 11.


Команда stop-process позволяет остановить запущенный процесс, например:

PS C:> Get-process notepad | stop-process

Такая возможность не всегда является безопасной, поэтому лучше использовать подобные команды с опцией whatif , которая показывает, что произойдет при выполнении той или иной команды, но на самом деле команда не выполняется:

PS C:> Get-Process notepad | stop-process –whatif

Кроме того, можно указывать на необходимость подтверждения перед выполнением команды:

PS C:> Get-Process notepad | stop-process –confirm

Результат выполнения команды с подтверждением представлен на рис. 12.


В последнем примере мы получаем описание действий, которые выполняет команда, и можем выбрать, подтверждать ее выполнение или нет.

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

PS C:> Set-ExecutionPolicy Unrestricted

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

PS C:> Set-ExecutionPolicy AllSigned

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

Работа с файловой системой

Одна из задач, с которой часто сталкиваются многие ИT-специалисты, связана с манипуляциями с файлами, такими как копирование, перемещение, переименование, удаление файлов и каталогов. На рис. 13 показаны основные команды Windows PowerShell, применяемые для манипуляций с файловой системой: new-item , copy-item , move-item , rename-item и remove-item .


В отличие от других оболочек, в которых существует и набор команд для файлов (например, delete или rename), и набор для каталогов (например, rd или md), в Windows PowerShell единый набор команд используется для манипуляций как с файлами, так и с каталогами.

Первая команда в нашем примере - new-item TextFiles –itemtype directory - применяется для создания нового подкаталога TextFiles в текущем каталоге. Если опустить параметр –itemtype , то Windows PowerShell спросит, что мы создаем - файл (file) или каталог (directory). Отметим, что у команды new-item есть алиас - ni. В сокращенном виде наша первая команда будет выглядеть так:

PS C:> ni TextFiles –itemtype directory

Затем мы используем команду copy-item (алиасы - cpi, cp, copy ) для копирования всех файлов с расширением *.txt в подкаталог TextFiles. Если применять данную команду в пакетном файле, имеет смысл сделать ее более понятной, указав параметры –path (источник) и –destination (приемник):

PS C:>copy-item –path ‘.\*.txt’ –destination ‘.\TextFiles’

После выполнения команды копирования мы используем команду set-location для перехода в подкаталог TextFiles. С помощью команды rename-item переименовываем файл psdemo.txt в psdemo.bak. При необходимости можно применять опции –path и –newName . После того как файл переименован, переносим его на один уровень вверх, используя команду move-item . Затем применяем команду set-location , а точнее - ее алиас sl для перехода в другой каталог. Манипуляции с файловой системой мы завершаем удалением всего каталога TextFiles, используя команду remove-item . Поскольку в каталоге TextFiles содержатся файлы, применяется опция –recurse . Если эта опция не указана, Windows PowerShell запросит подтверждение перед выполнением команды remove-item .

Работа с реестром

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


Наша первая команда использует алиасsl для выполнения команды set-location , изменяющей наше текущее местоположение с файловой системы на ветвь HKEY_CURRENT_USER в системном реестре:

PS C:\> sl hkcu:

Отметим, что, как и в случае работы с файловой системой, PowerShell применяет специальный провайдер для доступа к реестру.

Аналогами приведенной выше команды являются команды:

PS C:\> sl registry:hkcu

PS C:\> sl hkey_current_user

Следующая команда загружает содержимое всей ветви реестра HKEY_CURRENT_USER в переменную reg:

PS HKCU:\> $reg = gci . –rec –ea silentlycontinue

Для этого мы используем команду get-childitem (алиас - gci ), принцип работы которой аналогичен работе с файловой системой. Первый аргумент этой команды - «.» - указывает на то, что мы хотим получить содержимое текущей ветви реестра - HKEY_CURRENT_USER. Второй аргумент является сокращением от опции –recurse и указывает на то, что нам нужен рекурсивный сбор данных из всех подветвей текущей ветви реестра. И наконец, третий аргумент - –ea silentlycontinue - указывает на то, что команда должна продолжать выполняться даже в случае возникновения ошибок, связанных с недостатком прав доступа к определенным подветвям реестра.

Следующая команда в нашем примере:

PS HKCU:\>$s = $reg | % {if (gp $_.pspath) –match ‘PowerShell’){$_.pspath}}

копирует из реестра данные, содержащие строку ‘PowerShell’ . Мы начинаем с того, что берем объект reg и перенаправляем его в команду % , которая является алиасом команды for-each . Она выполняет рекурсивный обход всех элементов реестра, находящихся в объекте reg и на каждом шаге сохраняет элемент в специальном объекте PowerShell с именем ‘_’ . В фигурных скобках мы указываем действия, которые должны выполняться на каждом шаге выполнения команды for-each . Внутри блока for-each мы используем проверку if для того, чтобы узнать, соответствуют ли текущая запись реестра и ее свойство pspath, которые мы получаем через обращение к команде get-itemproperty (через алиас gp ), нашему критерию - наличию строки ‘PowerShell’ . Если соответствие найдено, мы возвращаем значение свойства pspath . Все найденные соответствия сохраняются в объекте s .

Работу с реестром мы завершаем перенаправлением результатов поиска в команду select-object (через алиас select ) и показываем два первых найденных результата. В качестве упражнения вы можете перенаправить финальные результаты в файл с помощью команды out-file .

Доступ к процессам

Еще одна задача, с которой могут столкнуться ИТ-специалисты, связана с обнаружением аномалий в работе системы, например процессов, которые потребляют большие объемы памяти. Давайте посмотрим, как эта задача решается средствами Windows PowerShell (рис. 15).


В первой команде мы сохраняем информацию о всех процессах, запущенных на данном компьютере, в переменной $allprocs :

PS C:\> $allprocs = get-process

После этого мы перенаправляем полученную информацию команде for-each , которая тоже может быть указана алиасом % или foreach . Данная команда перебирает все объекты, связанные с процессом, и на каждом шаге сохраняет информацию во внутреннем объекте $_ . Этот объект можно условно назвать текущим объектом. В качестве параметров для команды for-each мы указываем операцию сравнения значения свойства virtualmemorysize с интересующим нас размером памяти (20 Мбайт в нашем примере). Если значение этого свойства для текущего объекта больше заданного, мы выводим название процесса на экран. Отметим, что в PowerShell поддерживаются основные сокращения для указания размеров - KB, MB, GB, что очень полезно, поскольку не нужно считать нули при указании объемов памяти, дисков и т.п.

Доступ к системному журналу

При попытке обнаружения причин сбоев мы часто обращаемся к системному журналу, в котором хранится множество полезной информации о событиях, происходивших в системе. Обычно для исследования системного журнала применяется утилита Event Viewer (eventvwr.exe). В PowerShell мы можем воспользоваться встроенными командами, например командой get-eventlog , для быстрого исследования содержимого системного журнала (рис. 16).


Наша первая команда загружает ключевую информацию из системного журнала:

PS C:\> get-eventlog –list

Без использования опции –list PowerShell запросит точное указание названия системного журнала. В нашем примере мы видим несколько точек входа в системном журнале: Application, Internet Explorer, System, Windows Power Shell и т.п. Наша следующая команда извлекает записи из системного журнала, которые имеют тип “Error” :

PS C:\> $bad = get-eventlog “System” | where-object { $_.EntryType –eq “Error” }

Мы используем команду get-eventlog , которой указываем параметр “System” для извлечения только системных записей, - мы могли бы более четко задать это, применив параметр logName . Содержимое переменной $bad передается на вход команде where-object для фильтрации только интересующих нас записей. В качестве аргументов команды where-object мы указываем на то, что ищем только записи, у которых свойство EntryType равно “Error” .

Мы завершаем исследование системного журнала выводом на экран пяти последних записей об ошибках, используя для этого команду select-object с параметром –last :

PS C:\> $bad | select-object –last 5

Доступ к WMI

Как мы знаем, Windows Management Instrumentation (WMI) - это реализация компанией Microsoft стандарта Common Information Model (CMI). В большинстве случаев WMI применяется ИT-специалистами для получения информации об аппаратном и программном обеспечении, установленном на данном компьютере. Как мы увидим в следующем примере, использование Windows PowerShell существенно облегчает доступ к информации, хранимой в WMI (рис. 17).


В первой строке мы применяем команду get-wmiobject для получения информации о файле, используемом для свопинга памяти на диск и сохранения этой информации в переменной $pfu :

PS C:\> $pfu = get-wmiobject – class ‘win32_pageFileUsage’

PS C:\> $pfu | get-member –membertype property | where_object { $_.name –nomatch ‘_’ }

Обычно для нахождения информации по определенному классу можно использовать команду get-member без указания параметров, но в нашем примере нас интересуют только доступные свойства и только те из них, которые не содержат в имени символ подчеркивания. У внимательного читателя может возникнуть вопрос: каким образом мы узнали о существовании класса win32_pageFileUsage ? Ведь известно, что в WMI поддерживается более тысячи классов, помимо этого ряд приложений добавляет свои классы. Вы можете применить команду:

PS C:\> get-wmiobject –list

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

PS C:\> $pfu.caption; $pfu.currentusage

Вторая часть нашего примера посвящена другому классу - win32_DiskDrive , в котором хранится информация о дисках, установленных в системе. Этот класс - пример WMI-класса, содержащего более одного объекта. В нашем примере мы определяем значение свойства caption первого диска, установленного в системе:

PS C:\> $dd.caption

Использование XML-файлов

В последнее время XML-файлы все чаще используются для хранения конфигурационной информации. По мере того как данные в XML-файле накапливаются, он становится все менее удобным для прочтения. Далее мы рассмотрим, как применять функции Windows PowerShell для работы с XML-файлами.

Для примера возьмем конфигурационный файл Windows Calendar, который выглядит так (рис. 18):

и выполним над ним манипуляции, представленные на рис. 19.

В первой строке мы загружаем содержимое всего XML-файла в переменную, используя команду get-content :

PS C:\> $doc = get-content ‘.\settings.xml’

Обратим внимание на применение типа данных : если не указать использование данных этого типа, в переменную будет загружен просто текст.

Во второй строке мы выбираем определенную ветвь XML-файла - для этого применяется метод selectnodes объекта, хранящего XML-данные и XPath-описание адреса ветви:

PS C:\> $settings = $doc.selectnode(‘CalendarSettings/X-Root/VCalendar’)

После этого мы используем команду foreach-object для получения значения свойства Name для всех элементов в данной ветви.

Заключение

Мы рассмотрели основные возможности Windows PowerShell для упрощения задач, возникающих перед ИT-специалистами. Как мы знаем, эти задачи часто решаются с помощью скриптового языка VBScript. В Windows PowerShell есть возможность применения существующего кода на VBScript, а следовательно, миграция значительно упрощена (рис. 20).


В приведенном выше примере показано, как можно использовать существующий код на VBScript в PowerShell. В первой строке мы создаем новый COM-объект, который представляет собой ядро выполнения скриптовых программ - ScriptControl. Затем мы указываем, что будем использовать язык Visual Basic Script. В третьей строке задается собственно код на VBScript - в нашем примере это вызов функции MsgBox, но на практике в переменную можно, например, загрузить код файла. И наконец, в последней строке мы добавляем код на VBScript в наш объект - и код поступает на выполнение.

Сетевые ресурсы

Блог команды разработчиков продукта: http://blogs.msdn.com/PowerShell/ .

Утилиты, редакторы и дополнения: http://www.powershell.com/ .

Блог Дмитрия Сотникова из компании Quest: http://dmitrysotnikov.wordpress.com/ .

PowerGadgets - пример неограниченных возможностей расширения PowerShell:



Понравилась статья? Поделиться с друзьями: