Параметры

Завершено

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

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

Параметры поддерживают командлеты, функции и сценарии.

Объявление и использование параметра

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

Param()

Внутри круглых скобок нужно задать параметры, разделяя их запятыми. Типичное объявление параметра может выглядеть следующим образом:

# CreateFile.ps1
Param (
  $Path
)
New-Item $Path # Creates a new file at $Path.
Write-Host "File $Path was created"

Сценарий содержит параметр $Path, который используется для создания файла. Теперь сценарий более универсален.

Использование параметра

Чтобы вызвать сценарий с параметром, необходимо указать имя и значение. Предположим, что приведенный выше сценарий имеет имя CreateFile.ps1. Для его вызова можно использовать следующую команду:

./CreateFile.ps1 -Path './newfile.txt' # File ./newfile.txt was created.
./CreateFile.ps1 -Path './anotherfile.txt' # File ./anotherfile.txt was created.

Благодаря использованию параметра при необходимости повторно вызвать сценарий не нужно менять его файл.

Примечание.

Использование параметра для данного сценария не принципиально, поскольку вызывает только New-Item. Если сценарий будет состоять из нескольких строк, использование параметра будет целесообразным.

Улучшение параметров

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

  • Является ли он обязательным? Параметр является обязательным или дополнительным?
  • Какие значения разрешены? Какие значения являются обоснованными?
  • Допускается ли указывать несколько типов значений? Принимает ли параметр значения любого типа, например строка, логический оператор, целое число и объект?
  • Может ли параметр использовать значение по умолчанию? Можете ли вы пренебречь значением и использовать вместо него значение по умолчанию?
  • Можно ли улучшить использование этого параметра? Можно ли улучшить работу с параметром за счет добавления сообщения со справочной информацией?

Выбор метода

По умолчанию все параметры являются необязательными. Такой вариант является эффективным в некоторых случаях, но иногда необходимо, чтобы пользователь указал значения параметров, которые должны быть обоснованными. Если пользователь не указывает значение для параметра, сценарий должен закрыться или проинформировать пользователя, как устранить проблему. Самым плохим вариантом является продолжение работы сценария и операций, которые пользователь не желает выполнять.

Существует несколько методов повысить безопасность сценария. Можно написать пользовательский код для проверки значения параметра. Также можно применять декораторы, которые отвечают примерно за те же действия. Давайте рассмотрим оба метода.

  • Использование If/Else. Конструкция If/Else позволяет проверить значение параметра, а затем выбрать дальнейшие действия. Приведем пример:

    Param(
       $Path
    )
    If (-Not $Path -eq '') {
       New-Item $Path
       Write-Host "File created at path $Path"
    } Else {
       Write-Error "Path cannot be empty"
    } 
    

    Сценарий выполнит Write-Error, если не будет указано значение для параметра $Path.

  • Использование декоратора Parameter[]. Более простым методом, при котором можно сократить ввод данных, является использование декоратора Parameter[]:

    Param(
       [Parameter(Mandatory)]
       $Path
    )
    New-Item $Path
    Write-Host "File created at path $Path"
    

    Если запустить этот сценарий и проигнорировать значение для $Path, появится диалоговое окно с запросом значения:

    cmdlet CreateFile.ps1 at command pipeline position 1
    Supply values for the following parameters:
    Path:
    

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

    [Parameter(Mandatory, HelpMessage = "Please provide a valid path")]
    

    При выполнении сценария вы получите сообщение с запросом ввода !? для предоставления дополнительной информации:

    cmdlet CreateFile.ps1 at command pipeline position 1
    Supply values for the following parameters:
    (Type !? for Help.)
    Path: !?  # You type !?
    Please provide a valid path  # Your Help message.
    
  • Указание типа. При указании типа параметра можно установить, например, что в качестве значений параметра можно указывать только строки, а логические операторы недопустимы. Таким образом, пользователь понимает, чего следует ожидать. Для указания типа параметра можно вставить перед ним значение типа в квадратных скобках:

    Param(
       [string]$Path
    )
    

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