具有多个值的切换用例

时间:2019-07-17 09:42:22

标签: powershell switch-statement break

我要自动安装网络共享打印机时正在编写代码。脚本应安装在哪台打印机上取决于用户是在Sales还是HR中工作。我想用switch语句解决此问题,但问题是它始终与第一个值匹配。

我尝试了连续点或断点的几种组合,但是没有一个能达到我想要的结果。

$a = "HR"

switch ($a) {
    {"Marketing", "Sales"}     { "1" }
    {"Sales Department", "HR"} { "2" }
    "EDV"                      { "3" }
}

输出:

1
2

通常,控制台输出应为“ 2”,但应为“ 1”“ 2”。

3 个答案:

答案 0 :(得分:5)

将条件块更改为:

{$_ -in "Marketing", "Sales"}

通过这种方式,两个术语都将与切换用例匹配

答案 1 :(得分:0)

针对Mathias的回答,您不能同时使用:

$a = "HR"
switch($a){
    "Marketing"{}
    "Sales"{"1"; break}
    "Sales Department"{}
    "HR"{"2";break}
}

输出:

  

2

答案 2 :(得分:0)

一旦您将脚本块放在左侧,它就会变得更像where子句。

 $a | where {"Marketing", "Sales"}

返回的所有内容(如两个字符串的数组)都视为真实。这也将返回0:

$a = "HR"

switch ($a) {
    {"whatever"}               { "0" }
    {"Marketing", "Sales"}     { "1" }
    {"Sales Department", "HR"} { "2" }
    "EDV"                      { "3" }
}

使其工作的另一种方法:

$a = "HR"

switch ($a) {
    {$_ -eq "Marketing" -or $_ -eq "Sales"}     { "1" }
    {$_ -eq "Sales Department" -or $_ -eq "HR"} { "2" }
    "EDV"                                       { "3" }
}

或使用-regex选项:

$a = "HR"

switch -regex ($a) {
    "Marketing|Sales"     { "1" }
    "Sales Department|HR" { "2" }
    "EDV"                 { "3" }
}