02.12.2021

Синтаксис команд, описание параметров

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

Как упоминалось ранее, имя каждого командлета начинается с глагола. Он сообщает нам о характере его действия при выполнении. Далее знак “-” и существительное – это тот объект, над которым будет производиться действие. Далее через пробел перечисляются необходимые параметры. Powershell в отличие, например, от Python или C# не является регистрозависимым языком и не требователен к жесткому оформлению команд. Не важно сколько Вы поставите пробелов между именем командлета и параметром или его значением.

Каждый параметр начинается со знака “-“, после которого следует его имя и через пробел значение.

Общая структура командлета
Общая структура командлета

Ранее в статье мы уже разобрали два способа получения списка параметров командлетов и просмотра его синтаксиса. Это – выполнение Get-Command -Syntax и вызов справки через Get-Help. Здесь мы рассмотрим еще три способа:

  • Вы можете написать имя командлета, поставить черточку “-” (указываете, что сейчас будет имя параметра). И просто клавишей [TAB] перебираете все возможные параметры;
  • Использовать командлет Show-Command. В результате будет сформировано графическое окно с основными параметрами
Выполнение Show-Command
Выполнение Show-Command
  • Вы можете воспользоваться системой автоматического дополнения Intellisense. Так же пишете имя командлета, ставите черточку “-“. А далее жмете сочетание клавиш CTRL+ПРОБЕЛ. В результате Вам будет предложен список из возможных параметров с кратким пояснением типа их данных. Этот способ работает как в стандартной консоли, так и в консоли ISE. Он позволяет минимизировать количество синтаксических ошибок и временных затрат на решение проблем.
Intellisense в стандартной консоли
Intellisense в стандартной консоли
Intellisense в консоли ISE
Intellisense в консоли ISE

Так же стоит отметить, что допускается использовать алиасы не только имен командлетов, но и их параметров. Например, чтобы не писать длинное имя ComputerName, можно просто написать – CN. Получить полный список алиасов параметров по конкретному командлету помогает команда Get-Command:

(Get-Command Get-Service).Parameters.Values | Format-Table name, Aliases
Список алиасов параметров командлета Get-Service
Список алиасов параметров командлета Get-Service

Синтаксис множественных параметров

Синтаксис powershell позволяет для некоторых параметров принимать множество значений. Такие параметры имеют перечисляемый тип данных. Этот тип помечается сочетанием квадратных скобок []. В общем виде это выглядит следующим образом:

CmdletName -ParameterName Value1, Value2, Value3

Что было бы эквивалентно способу:

CmdletName -ParameterName Value1
CmdletName -ParameterName Value2
CmdletName -ParameterName Value3

Определим список таких параметров на примере командлета Get-Service:

Синтаксис Get-Service
Синтаксис 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.

Анонс следующей статьи: “Конвейер и форматирование вывода”

Игорь Чердаков

Мне 32 года. На текущий момент я являюсь администратором систем Microsoft в одной из крупнейших компаний в России. За моими плечами практически 7 лет опыта работы в IT, последние 3 из которых в администрировании. Сопровождая немалую инфраструктуру, в ежедневной деятельности я сталкиваюсь с необходимостью автоматизации рутинных процессов, в чем мне успешно помогает Powershell. Данный блог основывается на моем личном опыте и знаниях. Мои статьи не являются истиной в последней инстанции и я положительно отношусь к обоснованной и конструктивной критике. По этому я приглашаю Вас обсуждать волнующие нас вопросы, связанные с Powershell.

Посмотреть все записи автора Игорь Чердаков →

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *