Заметки о Windows и других программных продуктах Microsoft...

PowerShell 3.0. Обзор новых возможностей (часть 1)

PowerShell 3.0. Обзор новых возможностей (часть 1)

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

В третьей версии PowerShell прилично вырос. Если в  PowerShell 2.0 входит около десятка модулей и примерно 350 команд, то в составе PS 3.0 уже около 2300 командлетов из более чем 70 модулей.  Как видите, разница огромна. Теперь большую часть задач по администрированию можно решать с помощью стандартных команд, не прибегая к сложным сценариям.

общее количество модулей и командлетов в PowerShell 3.0

 

Улучшен инструментарий для работы с PowerShell. Встроенный редактор скриптов PowerShell ISE теперь является практически полноценной средой программирования. Он обзавелся функцией IntelliSense, позволяющей просматривать перечень командлетов и их параметров, перменных, утилит и т.п. Также он поддерживает сниппеты (фрагменты часто повторяющегося кода для автоматической вставки) и имеет возможность расширения функционала за счет аддонов.

IntelliSence в PowerShell ISE

 

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

панель команд в в PowerShell ISE

 

Кстати, окно Commands доступно не только в ISE. Командлет Show-Command позволяет вызвать его и работать с ним прямо из консоли.

Не забыты и те, кто предпочитает работать по старинке, в командной строке. Значительно упростилась процедура поиска нужного командлета. Если раньше поиск проводился только по тем модулям, которые загружены текущем сеансе, то теперь Get-Command ищет по всем модулям, доступным на локальном компьютере. Кроме того, автодополнение команд по нажатию Tab стало гораздо более функциональным и теперь завершает имена команд, параметров, значения параметров, перечисления, классы .NET, COM-объекты, скрытые каталоги и многое другое.

командлет Show-Command в PowerShell 3.0

 

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

Для примера выведем командой Get-Module список модулей в текущем сеансе. Как видите, загружено всего два модуля. Попробуем запустить команду Get-ADUser, которая входит в модуль ActiveDirectory. В PS 2.0 мы получили бы сообщение об ошибке, однако сейчас команда спокойно выполняется. А если еще раз посмотреть список активных модулей, то среди них мы увидим модуль ActiveDirectory. Очень удобно.

автозагрузка модулей в PowerShell 3.0

 

Кроме того, при необходимости мы можем импортировать модули PowerShell с удаленных компьютеров с помощью PS remoting. Для примера создадим удаленную сессию с компьютером SRV1:

$s = NewPsSession –ComputerName SRV1

Выведем список модулей на удаленном компьютере:

Get-Module –PsSession $s –ListAvailable

Выберем из списка нужный модуль и импортируем его:

ImportModule –PsSession $s  –Name ADRMS

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

импорт модулей из удаленного сеанса

 

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

обновляемая справка в PowerShell 3.0

 

Если же запустить Get-Help с ключом -Online, то будет открыта web-страница с расширенной справкой по указанному командлету.

online справка в PowerShell 3.0

 

Ну и по мелочи 🙂

Упрощен синтаксис у командлетов Where-Object и Foreach-Object. Для передачи данных по конвейеру больше нет необходимости использовать переменную $_ , вызывающую мистический ужас недоумение у начинающих пользователей. Для примера выведем по именам список процессов, нагружающих процессор более чем на 1%, старым:

Get-Process | where {S_.CPU -ge 1.0} | foreach {$_.Name}

и новым способом:

Get-Process | where CPU -ge 1.0 | foreach Name

Как говорится ″ощутите разницу″.

упрощение синтаксиса Where-Object и Foreach-Object

 

Некоторые старые командлеты обрели новую функциональность. Например, командлет
Get-Childitem (или просто ″dir″) получил новые параметры, которые упрощают поиск объекта по его атрибутам  (File, Directory, Hidden, ReadOnly и System). Для примера выведем все директории на диске C, содержащие в названии PowerShell и имеющие атрибут системный:

Get-Childitem -Path C:\ -Filter ″PowerShell″ -Directory -System -Recurse -Name

расширение функциональности Get-ChildItem

 

С помощью командлета Out-GridView теперь можно не только вывести объекты в графическом виде, но и производить над ними заданные действия. Например:

Get-Process | Out-GridView -PassThru | Stop-Process

Здесь мы можем отсортировать процессы, выбрав нужные, и все это в графическом режиме. А при нажатии OK выбранные процессы будут остановлены.

работа командлета Out-GridView

 

Улучшена работа функции ″Run with PowerShell″, позволяющей запускать скрипт из проводника, кликнув на нем правой клавишей мыши.  Эта функция предназначена для выполнения скриптов, которые не требуют ввода параметров и не возвращают результаты в командной строке.

Если раньше запуск любых PowerShell скриптов определялся политикой выполнения (ExecutionPolicy), то теперь запущенный с помощью ″Run with PowerShell″ скрипт отработает вне зависимости от установленной ExecutionPolicy. При запуске скрипта выполняется команда PowerShell.exe -File <FileName> -ExecutionPolicy Bypass, которая запускает отдельную сессию PowerShell с политикой выполнения Bypass, выполняет скрипт и закрывает сессию.

Данный механизм имеет одно исключение: если для пользователя или компьютера установлена политика AllSigned, то ″Run with PowerShell″ сможет запустить только подписанные скрипты.

запуск скриртов PowerShell из проводника

 

И еще, PowerShell 3.0 входит в состав Windows Management Framework 3.0 и его можно спокойно скачать и установить на Windows 7 SP1 и Windows Server 2008 SP2. Так что нужно ставить и пробовать.

Для начала пожалуй хватит. Надеюсь эта статья поможет оценить масштаб разрушений изменений. которым подвергся PowerShell с выходом 3-ей версии. О более серьезных изменениях в следующей статье.

 
 
Комментарии

Но появились и косяки! При запуске процесса перестал отрабатывать ключик -wait , подробнее: https://connect.microsoft.com/PowerShell/feedback/details/774903/powershell-3-0-start-process-disregards-wait-parameter-when-invoked-remotely