В третьей версии PowerShell прилично вырос. Если в PowerShell 2.0 входит около десятка модулей и примерно 350 команд, то в составе PS 3.0 уже около 2300 командлетов из более чем 70 модулей. Как видите, разница огромна. Теперь большую часть задач по администрированию можно решать с помощью стандартных команд, не прибегая к сложным сценариям.
Улучшен инструментарий для работы с PowerShell. Встроенный редактор скриптов PowerShell ISE теперь является практически полноценной средой программирования. Он обзавелся функцией IntelliSense, позволяющей просматривать перечень командлетов и их параметров, перменных, утилит и т.п. Также он поддерживает сниппеты (фрагменты часто повторяющегося кода для автоматической вставки) и имеет возможность расширения функционала за счет аддонов.
Отдельно стоит отметить окно Commands. В этом окне можно составлять команды в визуальном режиме: выбрать модуль, найти нужный командлет и задать ему необходимые параметры. Получившуюся команду можно скопировать в консоль или сразу запустить на выполнение. Получается этакий конструктор для начинающих.
Кстати, окно Commands доступно не только в ISE. Командлет Show-Command позволяет вызвать его и работать с ним прямо из консоли.
Не забыты и те, кто предпочитает работать по старинке, в командной строке. Значительно упростилась процедура поиска нужного командлета. Если раньше поиск проводился только по тем модулям, которые загружены текущем сеансе, то теперь Get-Command ищет по всем модулям, доступным на локальном компьютере. Кроме того, автодополнение команд по нажатию Tab стало гораздо более функциональным и теперь завершает имена команд, параметров, значения параметров, перечисления, классы .NET, COM-объекты, скрытые каталоги и многое другое.
Значительно улучшена работа с модулями. Больше нет необходимости вручную импортировать нужный модуль или прописывать его в пользовательском профиле для автоматической загрузки. Теперь любой модуль импортируется в текущий сеанс автоматически, при первом к нему обращении.
Для примера выведем командой Get-Module список модулей в текущем сеансе. Как видите, загружено всего два модуля. Попробуем запустить команду Get-ADUser, которая входит в модуль ActiveDirectory. В PS 2.0 мы получили бы сообщение об ошибке, однако сейчас команда спокойно выполняется. А если еще раз посмотреть список активных модулей, то среди них мы увидим модуль ActiveDirectory. Очень удобно.
Кроме того, при необходимости мы можем импортировать модули PowerShell с удаленных компьютеров с помощью PS remoting. Для примера создадим удаленную сессию с компьютером SRV1:
$s = NewPsSession –ComputerName SRV1
Выведем список модулей на удаленном компьютере:
Get-Module –PsSession $s –ListAvailable
Выберем из списка нужный модуль и импортируем его:
ImportModule –PsSession $s –Name ADRMS
Теперь, если посмотреть, импортированный модуль доступен для использования в текущем сеансе.
Претерпела некоторые изменения и справочная система. Встроенная справка сделана обновляемой. Изначально PowerShell 3.0 поставляется вообще без нее, а справочные файлы загружаются на локальный компьютер при первом обращении. Затем с помощью командлета Update-Help можно загружать обновленные файлы справки, как все полностью так и для отдельных модулей.
Если же запустить Get-Help с ключом -Online, то будет открыта web-страница с расширенной справкой по указанному командлету.
Ну и по мелочи
Упрощен синтаксис у командлетов Where-Object и Foreach-Object. Для передачи данных по конвейеру больше нет необходимости использовать переменную $_ , вызывающую мистический ужас
недоумение у начинающих пользователей. Для примера выведем по именам
список процессов, нагружающих процессор более чем на 1%, старым:
Get-Process | where {S_.CPU -ge 1.0} | foreach {$_.Name}
и новым способом:
Get-Process | where CPU -ge 1.0 | foreach Name
Как говорится ″ощутите разницу″.
Некоторые старые командлеты обрели новую функциональность. Например, командлет
Get-Childitem (или
просто ″dir″) получил новые параметры, которые упрощают поиск объекта
по его атрибутам (File, Directory, Hidden, ReadOnly и System). Для
примера выведем все директории на диске C, содержащие в названии
PowerShell и имеющие атрибут системный:
Get-Childitem -Path C:\ -Filter ″PowerShell″ -Directory -System -Recurse -Name
С помощью командлета Out-GridView теперь можно не только вывести объекты в графическом виде, но и производить над ними заданные действия. Например:
Get-Process | Out-GridView -PassThru | Stop-Process
Здесь мы можем отсортировать процессы, выбрав нужные, и все это в графическом режиме. А при нажатии OK выбранные процессы будут остановлены.
Улучшена работа функции ″Run with PowerShell″, позволяющей запускать скрипт из проводника, кликнув на нем правой клавишей мыши. Эта функция предназначена для выполнения скриптов, которые не требуют ввода параметров и не возвращают результаты в командной строке.
Если раньше запуск любых PowerShell скриптов определялся политикой выполнения (ExecutionPolicy), то теперь запущенный с помощью ″Run with PowerShell″ скрипт отработает вне зависимости от установленной ExecutionPolicy. При запуске скрипта выполняется команда PowerShell.exe -File <FileName> -ExecutionPolicy Bypass, которая запускает отдельную сессию PowerShell с политикой выполнения Bypass, выполняет скрипт и закрывает сессию.
Данный механизм имеет одно исключение: если для пользователя или компьютера установлена политика AllSigned, то ″Run with PowerShell″ сможет запустить только подписанные скрипты.
И еще, PowerShell 3.0 входит в состав Windows Management Framework 3.0 и его можно спокойно скачать и установить на Windows 7 SP1 и Windows Server 2008 SP2. Так что нужно ставить и пробовать.
Для начала пожалуй хватит. Надеюсь эта статья поможет оценить масштаб разрушений изменений. которым подвергся PowerShell с выходом 3-ей версии. О более серьезных изменениях в следующей статье.