Расширенные функции PowerShell: привязки и параметры командлета
ДомДом > Блог > Расширенные функции PowerShell: привязки и параметры командлета

Расширенные функции PowerShell: привязки и параметры командлета

Aug 22, 2023

Брайен Поузи | 08 августа 2023 г.

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

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

Связанный: Как фильтровать объекты в PowerShell

Как видите, сценарий делает немного больше, чем просто отображает пару строк текста, вызывает функцию (с именем Do-Something), а затем отображает еще пару строк текста. Код функции заключен в фигурные скобки.

Теперь, рассмотрев пример базовой функции, давайте обсудим расширенные функции PowerShell. Термин «расширенная функция» имеет конкретное значение и не имеет ничего общего со сложностью функции. Расширенная функция — это функция, которая поддерживает привязки командлета, параметры или и то, и другое.

Мы рассмотрим, что означают эти термины и как мы можем преобразовать базовую функцию, показанную выше, в расширенную функцию.

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

Рисунок 1.Большинство собственных командлетов PowerShell позволяют использовать общие параметры.

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

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

PowerShell упрощает добавление привязки командлета к функции. Просто добавьте эти две строки под объявлением функции:

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

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

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

Этот сценарий очень похож на тот, который я представил ранее, с несколькими дополнительными строками кода:

При выполнении скрипта выдаст ошибку. Однако функция продолжит работу, несмотря на ошибку, поскольку ошибка не является фатальной. Вы можете увидеть, как это выглядит на рисунке 2. Честно говоря, даже если бы я не включил действие при ошибке, функция продолжила бы работу в случае нефатальной ошибки, поскольку это обычный способ работы PowerShell.

Фигура 2.Если сценарий PowerShell обнаруживает ошибку, функция продолжает работу.

Есть еще несколько способов справиться с ошибкой. На рисунке 3 вы можете увидеть, что происходит, когда действие при ошибке меняется на «Стоп». В этом случае, даже если ошибка не является критической, PowerShell завершает функцию при обнаружении ошибки. Стоит отметить, что, поскольку действие при ошибке применяется к вызову функции, при возникновении ошибки завершается только функция (а не весь скрипт). При обнаружении ошибки PowerShell просто отказывается от функции, возвращается к телу сценария и продолжает выполнять остальную часть сценария.

Рисунок 3.Установка для ErrorAction значения Stop приводит к завершению функции при возникновении ошибки.

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

Рисунок 4.