Замена нескольких операторов 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

Другие вопросы по тегам