Общая структура командлетов
В предыдущих статьях Вы уже встречали различные командлеты и в какой-то степени уже научились ими пользоваться. Но теперь давайте посмотрим на их формальную структуру и синтаксис.
Как уже упоминалось ранее, имя каждого командлета начинается с глагола, который сообщает нам о характере его действия при выполнении. Знака “-” и существительного – того объекта, над которым будет производиться действие. Далее через пробел перечисляются необходимые параметры. Powershell в отличие, например, от Python или C# не является регистрозависимым языком и не требователен к жесткому оформлению команд. Для него не важно сколько Вы поставите пробелов между именем командлета и параметром или между параметром и его значением.
Каждый параметр начинается со знака “-“, после чего следует его имя и через пробел значение.
Ранее в статье мы уже разобрали два способа получения списка параметров командлетов и просмотра его синтаксиса. Это – выполнение Get-Command -Syntax и вызов справки через Get-Help. Здесь мы рассмотрим еще три способа:
- Вы можете написать имя командлета, поставить черточку “-” (указываете, что сейчас будет имя параметра) и просто клавишей [TAB] перебираете все возможные параметры;
- Использовать командлет Show-Command. В результате будет сформировано графическое окно с основными параметрами
- Вы можете воспользоваться системой автоматического дополнения Intellisense. Так же пишете имя командлета, ставите черточку “-“, а далее жмете сочетание клавиш CTRL+ПРОБЕЛ. В результате Вам будет предложен список из возможных параметров с кратким пояснением типа их данных. Этот способ работает как в стандартной консоли, так и в консоли ISE.
В дополнение ко всему стоит отметить, что допускается использовать алиасы не только имен командлетов, но и их параметров. Например, чтобы не писать длинное имя ComputerName, можно просто написать – CN. Получить полный список алиасов параметров по конкретному командлету помогает команда Get-Command:
(Get-Command Get-Service).Parameters.Values | Format-Table name, Aliases
Множественные параметры
Некоторые параметры способны принимать множество значений. Такие параметры имеют перечисляемый тип данных. Этот тип помечается сочетанием квадратных скобок []. В общем виде это выглядит следующим образом:
CmdletName -ParameterName Value1, Value2, Value3
Что было бы эквивалентно способу:
CmdletName -ParameterName Value1
CmdletName -ParameterName Value2
CmdletName -ParameterName Value3
Определим список таких параметров на примере командлета Get-Service:
Как Вы видите, в данном случае множественными параметрами являются: Name, ComputerName, Include, Exclude. Список значений можно подавать как в явном виде, так и путем подстановки переменной с их списком.
Общие параметры
Помимо основных параметров каждый командлет имеет ряд общих очень полезных параметров. Исходя из опыта, могу сказать, что их практически никто и никогда не использует. Но им легко можно найти полезное применение, а иногда и вовсе без них не обойтись. Приступим:
- -Debug. Отображает детализированные сведения об операции для разработчиков. Этот параметр работает только тогда, когда команда генерирует сообщение отладки.
- -ErrorAction, -WarningAction, -InformationAction. Определяет поведение скрипта в случае возникновения ошибки, предупреждения или уведомления соответственно. Параметры могут принимать следующие значения: Suspend – отобразить сообщение и приостановить скрипт, Ignore – не фиксировать какие-либо ошибки, предупреждения, продолжить выполнение скрипта, переменная $Error не будет содержать информацию об ошибке, Inquire – в случае уведомления запросит подтверждение дальнейшей операции, Continue – отображает текст события в консоли, скрипт продолжает работу, Stop – Останавливает выполнение скрипта, SilentlyContinue – Не выводит сообщение в консоль, в случае ошибки записывает ее в переменную $Error, скрипт продолжает работу.
- -ErrorVariable, -WarningVariable, -InformationVariable. Позволяет сохранять информацию об ошибке, предупреждении или уведомления в любую переменную. Если Вы хотите собрать список ошибочных случаев работы командлета, этот способ может решить проблему.
- -OutBuffer. Параметр позволяет передавать по конвейеру результат выполнения команды порционно. Например, последующий командлет при обработке большого числа объектов создает излишнюю нагрузку. В таком случае объекты можно подавать небольшими группами.
- -OutVariable. Передает результат команды по конвейеру, попутно сохраняя его в указанную переменную.
- -PipelineVariable. Сохраняет в указанную переменную текущий объект, проходящий по конвейеру.
- -Verbose. Выводит в консоль подробную информацию о выполняемых скриптом или командой действиях.
- -WhatIf. Этот параметр моделирует результат выполнения командлета. При этом фактически действия не выполняются. Полезно при внесении каких-нибудь критически важных изменений.
- -Confirm. Определяет необходимость подтверждения выполнения команды, принимает значения $True либо $False.
Анонс следующей статьи: “Конвейер и форматирование вывода”