То, что вы в данный момент делаете, будет работать, и, вероятно, с этим не будет проблем с производительностью или эффективностью. Однако можно использовать один, два или все три переключателя при запуске сценария или функции. Так как вы делаете блоки if
и elseif
, первый код, который оценивается как true
, будет иметь свой кодовый блок, а остальные блоки игнорируются. Ниже приведены некоторые другие подходы, которые можно использовать.
Вариант 1: В любое время можно использовать любое количество переключателей
Param (
[switch] $newyork,
[switch] $florida,
[switch] $california
)
if ($newyork) {"https://newyork.com"}
if ($florida) {"https://florida.com"}
if ($california) {"https://california.com"}
Вам следует go только с инструкциями if
, если вы хотите, чтобы несколько переключателей использовались одновременно.
Опция 2. Только один переключатель можно использовать одновременно с наборами параметров
function test {
param(
[Parameter(ParameterSetName='NewYork',Mandatory)]
[switch]$newyork,
[Parameter(ParameterSetName='florida',Mandatory)]
[switch]$florida,
[Parameter(ParameterSetName='california',Mandatory)]
[switch]$california
)
if ($newyork) {
"newyork"
}
if ($florida) {
"florida"
}
if ($california) {
"california"
}
}
Для этого необходимо использовать один переключатель. Более или менее выдает ошибку.
Опция 3: Использование перечислимых типов для принудительной установки значения одного параметра
enum Location
{
newyork
florida
california
}
function test {
param(
[Parameter(Mandatory)]
[Location]$location
)
"https://{0}.com" -f $location
}
Перечислимые типы имеют свои место. Мне нравятся они для этого решения. Однако он попытается проанализировать входные данные, что может привести к нежелательным результатам. Например, test new
свяжет newyork
с $location
.
Опция 4: проверка строки с одним параметром
function test {
param(
[Parameter(Mandatory)]
[ValidateSet('newyork','florida','california')]
[string]$location
)
"https://{0}.com" -f $location
}
Для этого требуется, чтобы при запуске функции была введена одна из трех строк. Использование оператора формата строки (-f
) позволяет нам сократить код и удалить весь if
logi c.