PowerShell - 定义多个 IF 语句结果
PowerShell - Defining multiple IF statements outcomes
我在使用以下脚本时遇到问题。
我的目标是通过下面的所有 if 语句检查 $city,并 return 给我正确的 $region。
目前它保持 returning 返回“NA-West”,因为那是我最后的 if 语句。
感谢任何帮助,谢谢
$city = "New York"
if ($city -eq "Bangalore" -or "Hong Kong" -or "Jakarta" -or "Melbourne" -or "New Delhi" -or "Seoul" -or "Shanghai" -or "Sydney" -or "Taipei City" -or "Tokyo") {
$region = "APAC"
}
if ($city -eq "Hamburg" -or "London" -or "Madrid" -or "Milan" -or "Paris" ) {
$region = "EMEA"
}
if ($city -eq 'Chicago' -or 'Detroit' -or 'New York' -or 'Toronto') {
$region = "NA-East"
}
if ($city -eq "Bellevue" -or "Boulder" -or "Denver" -or "Irvine" -or "Los Angeles" -or "San Francisco" -or "San Jose" -or "Santa Barbara" -or "Seattle" -or "Ventura") {
$region = "NA-West"
}
Write-Host "This is the region: " $region
Write-Host "This is the city: " $city
这没有按预期工作,因为你所有的 if
条件都是 总是 真 - 所以 $region = "NA-West"
总是最后执行。
原因是 -or
运算符是一个 布尔逻辑 运算符 - 它需要两个操作数并评估其中是否至少有一个是“真实的”,通过试图将任一值转换为 [bool]
(例如 $true
或 $false
)。
当你有这样的表达时:
$city -eq "Bellevue" -or "Boulder"
PowerShell 有效地将其解释为:
[bool]($city -eq "Bellevue") -or [bool]("Boulder")
当 PowerShell 将字符串转换为 [bool]
时,规则是 空字符串 被转换为 $false
,而 non-empty 字符串(如“Boulder”)被转换为$true
.
所以你最后的 if
声明与你写的完全一样:
if ($city -eq "Bellevue" -or $true -or $true -or $true -or $true -or $true -or $true -or $true -or $true -or $true) {
您需要继续重申您要进行的比较:
if($city -eq "Bellevue" -or $city -eq "Boulder" -or $city -eq "Denver" -or $city -eq "Irvine" -or $city -eq "Los Angeles" -or $city -eq "San Francisco" -or $city -eq "San Jose" -or $city -eq "Santa Barbara" -or $city -eq "Seattle" -or $city -eq "Ventura")
或者,更好的是,改用 -contains
/-in
运算符:
if($city -in "Bellevue", "Boulder", "Denver", "Irvine", "Los Angeles", "San Francisco", "San Jose", "Santa Barbara", "Seattle", "Ventura")
根据您的代码,它将是
$city = "New York"
if ($city -eq "Bangalore" -or $city -eq "Hong Kong" -or $city -eq "Jakarta" -or $city -eq "Melbourne" -or $city -eq "New Delhi" -or $city -eq "Seoul" -or $city -eq "Shanghai" -or $city -eq "Sydney" -or $city -eq "Taipei City" -or $city -eq "Tokyo") {
$region = "APAC"
}
if ($city -eq "Hamburg" -or $city -eq "London" -or $city -eq "Madrid" -or $city -eq "Milan" -or $city -eq"Paris" ) {
$region = "EMEA"
}
if ($city -eq 'Chicago' -or $city -eq 'Detroit' -or $city -eq 'New York' -or $city -eq 'Toronto') {
$region = "NA-East"
}
if ($city -eq "Bellevue" -or $city -eq "Boulder" -or $city -eq "Denver" -or $city -eq "Irvine" -or $city -eq "Los Angeles" -or $city -eq "San Francisco" -or $city -eq "San Jose" -or $city -eq "Santa Barbara" -or $city -eq "Seattle" -or $city -eq "Ventura") {
$region = "NA-West"
}
Write-Host "This is the region: " $region
Write-Host "This is the city: " $city
我在使用以下脚本时遇到问题。 我的目标是通过下面的所有 if 语句检查 $city,并 return 给我正确的 $region。 目前它保持 returning 返回“NA-West”,因为那是我最后的 if 语句。 感谢任何帮助,谢谢
$city = "New York"
if ($city -eq "Bangalore" -or "Hong Kong" -or "Jakarta" -or "Melbourne" -or "New Delhi" -or "Seoul" -or "Shanghai" -or "Sydney" -or "Taipei City" -or "Tokyo") {
$region = "APAC"
}
if ($city -eq "Hamburg" -or "London" -or "Madrid" -or "Milan" -or "Paris" ) {
$region = "EMEA"
}
if ($city -eq 'Chicago' -or 'Detroit' -or 'New York' -or 'Toronto') {
$region = "NA-East"
}
if ($city -eq "Bellevue" -or "Boulder" -or "Denver" -or "Irvine" -or "Los Angeles" -or "San Francisco" -or "San Jose" -or "Santa Barbara" -or "Seattle" -or "Ventura") {
$region = "NA-West"
}
Write-Host "This is the region: " $region
Write-Host "This is the city: " $city
这没有按预期工作,因为你所有的 if
条件都是 总是 真 - 所以 $region = "NA-West"
总是最后执行。
原因是 -or
运算符是一个 布尔逻辑 运算符 - 它需要两个操作数并评估其中是否至少有一个是“真实的”,通过试图将任一值转换为 [bool]
(例如 $true
或 $false
)。
当你有这样的表达时:
$city -eq "Bellevue" -or "Boulder"
PowerShell 有效地将其解释为:
[bool]($city -eq "Bellevue") -or [bool]("Boulder")
当 PowerShell 将字符串转换为 [bool]
时,规则是 空字符串 被转换为 $false
,而 non-empty 字符串(如“Boulder”)被转换为$true
.
所以你最后的 if
声明与你写的完全一样:
if ($city -eq "Bellevue" -or $true -or $true -or $true -or $true -or $true -or $true -or $true -or $true -or $true) {
您需要继续重申您要进行的比较:
if($city -eq "Bellevue" -or $city -eq "Boulder" -or $city -eq "Denver" -or $city -eq "Irvine" -or $city -eq "Los Angeles" -or $city -eq "San Francisco" -or $city -eq "San Jose" -or $city -eq "Santa Barbara" -or $city -eq "Seattle" -or $city -eq "Ventura")
或者,更好的是,改用 -contains
/-in
运算符:
if($city -in "Bellevue", "Boulder", "Denver", "Irvine", "Los Angeles", "San Francisco", "San Jose", "Santa Barbara", "Seattle", "Ventura")
根据您的代码,它将是
$city = "New York"
if ($city -eq "Bangalore" -or $city -eq "Hong Kong" -or $city -eq "Jakarta" -or $city -eq "Melbourne" -or $city -eq "New Delhi" -or $city -eq "Seoul" -or $city -eq "Shanghai" -or $city -eq "Sydney" -or $city -eq "Taipei City" -or $city -eq "Tokyo") {
$region = "APAC"
}
if ($city -eq "Hamburg" -or $city -eq "London" -or $city -eq "Madrid" -or $city -eq "Milan" -or $city -eq"Paris" ) {
$region = "EMEA"
}
if ($city -eq 'Chicago' -or $city -eq 'Detroit' -or $city -eq 'New York' -or $city -eq 'Toronto') {
$region = "NA-East"
}
if ($city -eq "Bellevue" -or $city -eq "Boulder" -or $city -eq "Denver" -or $city -eq "Irvine" -or $city -eq "Los Angeles" -or $city -eq "San Francisco" -or $city -eq "San Jose" -or $city -eq "Santa Barbara" -or $city -eq "Seattle" -or $city -eq "Ventura") {
$region = "NA-West"
}
Write-Host "This is the region: " $region
Write-Host "This is the city: " $city