Вы заново изобретаете колесо. Обычные сценарии PowerShell имеют параметры, начинающиеся с -
, например script.ps1 -server http://devserver
Затем вы обрабатываете их в секции param
в начале файла.
Вы также можете назначить значения по умолчанию вашим параметрам, прочитать их из консоли, если они недоступны, или остановить выполнение скрипта:
param (
[string]$server = "http://defaultserver",
[Parameter(Mandatory=$true)][string]$username,
[string]$password = $( Read-Host "Input password, please" )
)
Внутри скрипта вы можете просто
write-output $server
, поскольку все параметры становятся переменными, доступными в области видимости скрипта.
В этом примере $server
получает значение по умолчанию, если скрипт вызывается без него, скрипт останавливается, если вы пропустите параметр -username
, и запрашивает ввод с терминала, если -password
опущен.
Обновление:
Вы также можете передать «флаг» (логический параметр true / false) в сценарий PowerShell. Например, ваш сценарий может принять «силу», когда сценарий выполняется в более осторожном режиме, когда сила не используется.
Ключевое слово для этого [switch]
тип параметра:
param (
[string]$server = "http://defaultserver",
[string]$password = $( Read-Host "Input password, please" ),
[switch]$force = $false
)
Внутри скрипта вы будете работать с ним так:
if ($force) {
//deletes a file or does something "bad"
}
Теперь при вызове скрипта вы должны установить параметр switch / flag следующим образом:
.\yourscript.ps1 -server "http://otherserver" -force
Если вы явно хотите заявить, что флаг не установлен, для этого есть специальный синтаксис
.\yourscript.ps1 -server "http://otherserver" -force:$false
Ссылки на соответствующую документацию Microsoft (для PowerShell 5.0; версии 3.0 и 4.0 также доступны по ссылкам):