首页 > 解决方案 > 替换多个 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"
}

你能推荐一些更好的方法来编写相同的代码吗?

标签: powershellpowershell-4.0powershell-remotingcmdlet

解决方案


您可以使用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


推荐阅读