#powershell
#powershell
Вопрос:
Я создаю оболочку, и в моем ps1
файле я хочу вызвать:
ConnectTo-PSSession -Path "test" -Confirm
Поскольку я хочу завершить этот вызов, я создал файл ps1 с теми же параметрами:
Param(
[string]$Path,
[switch]Confirm
)
Теперь я хотел бы вызвать ConnectTo-PSSession с этими параметрами, но основная проблема заключается в том, что я не хочу даже вызывать флаг, если он не требуется:
ConnectTo-PSSession -Path $Path $Confirm //Confirm here is not working
Я взглянул Invoke-Expression
, но, похоже, у него будут проблемы с безопасностью. Есть ли способ для меня достичь моего результата без Invoke-Expression
? Я, конечно, могу начать писать If
инструкции, но это плохо масштабируется с несколькими параметрами, поскольку мне понадобится безумное количество этих проверок.
Ответ №1:
Поскольку вы Confirm
указали параметр в качестве параметра переключения (но забыли добавить к нему знак доллара), измените сценарий следующим образом:
Param(
[string]$Path,
[switch]$Confirm
)
ConnectTo-PSSession -Path $Path -Confirm:$Confirm
Теперь, если вы вызовете этот скрипт с -Confirm
помощью переключателя, он будет интерпретироваться как $true, тогда как при выключении swith ConnectTo-PSSession
с подтверждением интерпретируется как $false
Ответ №2:
Две вещи:
вы можете указать значение по умолчанию в блоке параметров:
Param(
[string]$Path = $PWD ,
[switch]$Confirm = $True
)
Параметр Switch не будет принимать значение $Confirm
без специального вызова. Чтобы указать параметр переключателя, используйте ... -Confirm:$Confirm
без пробела после :
Комментарии:
1. Почему вы присваиваете параметру switch значение по умолчанию $True, когда он уже имеет значение по умолчанию $False, когда его нет в вызове?
2. @Theo зависит от того, как вы его реализуете. Я видел много параметров переключения, которые делают противоположное тому, что предполагает их название. Другие инвертируются
-NoConfirmation
, как или что-то в этом роде. В одном из моих сценариев я вычисляю значение переключателя на основе uppon, если заполнен другой параметр:[switch]$useGUI = $([string]::IsNullOrEmpty($CsvPath))
> Переключатель$true
, если неCsvPath
указано. в этом случае я показываю графический интерфейс. В противном случае сценарий представляет собой чистую командную строку. Но я могу заставить его отображать графический интерфейс и также указать путь!3. Но тогда я предлагаю вам определить его как
[bool]
и не использовать[switch]
вопреки тому, для чего он предназначен..