Вы заново изобретаете колесо. Обычные сценарии 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 также доступны по ссылкам):
[string]$username = $(throw "-username is required.")
есть синтаксис обязательных параметров:[Parameter(Mandatory=$true)][string]$username
. Вот более подробную информацию о разнице между этими методами: blogs.technet.com/b/heyscriptingguy/archive/2011/05/22/...