具有多个值的 Switch-Case

Switch-Case with multiple Values

我正在编写代码,希望自动安装网络共享打印机。脚本应该安装哪台打印机取决于用户是在销售部门还是人力资源部门工作。我想用 switch 语句解决这个问题,但问题是它总是匹配第一个值。

我尝试了几种继续点或断点的组合,但其中 none 导致了我想要的结果。

$a = "HR"

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

输出:

1
2

正常情况下,控制台输出应该是“2”,但实际是“1”“2”。

将条件块更改为:

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

这样两个词都会匹配 switch case

针对 Mathias 的回答,您是否也可以使用:

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

输出:

2

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

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

任何 returned,比如两个字符串的数组,都被认为是真的。这也会 return 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" }
}