替换多个 if 语句

Replacing multiple if statements

我正在使用 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"
}

你能建议一些更好的编写相同代码的方法吗?

您可以使用 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} 将阻止 1234

的输出