Powershell Switch 语句字符串匹配不起作用

Jef*_*eff 3 powershell

我无法在我正在使用的 Powershell 脚本中使用简单的 switch 语句。以前一直使用嵌套if,想要清理一下。代码如下。

当我在调试中通过 Powershell ISE 并评估测试(例如$_ -match 'match1')时,它确实根据 的值评估为 true $mystring。但是,它似乎永远无法正确执行与 Switch 块中该值关联的代码。我确信我错过了一些明显的东西,并感谢任何指导。希望我的描述有意义。我正在运行 v5.1。

Switch ($myString)
{
  ($_ -match 'match1') { somecodeblock }
  ($_ -match 'match2') { somecodeblock }
  ($_ -match 'match3') { somecodeblock }
  ($_ -match 'match3') { somecodeblock }
  ($_ -match 'match4') { somecodeblock }
  ($_ -match 'match4') { somecodeblock }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*agg 7

正确的语法是在使用 $_ 时在测试周围使用花括号(您当前正在使用括号):

Switch ($myString)
{
   {$_ -match 'match1'} {somecodeblock}
}
Run Code Online (Sandbox Code Playgroud)

当您不使用 $_ 时,可以从测试中完全省略它们,如果您使用 -wildcard 参数,则可以这样做:

Switch -wildcard ($myString)
{
   '*match1*' {somecodeblock}
}
Run Code Online (Sandbox Code Playgroud)