替换多个 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}
将阻止 12
和 34
的输出
我正在使用 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}
将阻止 12
和 34