Замена нескольких операторов if
Я использую PS версии 5.0, и у меня немало if
заявления, которые могут расти со временем.
if ($hostname -like "**12*") {
Write-Output "DC1"
} elseif ($Hostname -like "**23*") {
Write-Output "DC2"
} elseif ($Hostname -like "**34*") {
Write-Output "DC3"
} elseif ($Hostname -like "**45*") {
Write-Output "DC4"
}
Можете ли вы предложить лучший способ написания того же кода?
1 ответ
Решение
Вы можете использовать оператор switch. Вот пример использования -Regex
флаг, так как похоже, что вы делаете простое совпадение, а затем может вырезать *
подстановочные знаки.
$hostname = 'asdf12asdf'
switch -Regex ($hostname) {
"12" {Write-Output "DC1"}
"23" {Write-Output "DC2"}
"34" {Write-Output "DC3"}
"45" {Write-Output "DC4"}
Default {Write-Error "No Match Found"}
}
Если вы не хотите, чтобы несколько совпадений добавили ; Break
после каждого случая. Например, если у вас было имя хоста, такое как asdf12asdf34
заявление "12" {Write-Output "DC1"; Break}
будет препятствовать выходу обоих 12
а также 34