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