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

时间:2017-03-29 14:42:22

标签: powershell

我无法在我正在使用的Powershell脚本中使用简单的switch语句。以前一直使用嵌套ifs并希望清理一下。代码如下。当我在调试中通过Powershell ISE并评估测试(例如 $ _ -match' match1' )时,它会根据$ mystring的值按预期评估为true。但是,似乎永远不会正确执行与Switch块中该值相关联的代码。我确定我错过了一些明显的东西,并感谢任何指导。希望我的描述有意义。我正在运行v5.1。

提前感谢任何想法/建议。

Switch ($myString)
{
($_ -match 'match1') {somecodeblock}
($_ -match 'match2') {somecodeblock}
($_ -match 'match3') {somecodeblock}
($_ -match 'match3') {somecodeblock}
($_ -match 'match4') {somecodeblock}
($_ -match 'match4') {somecodeblock}
}

2 个答案:

答案 0 :(得分:2)

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

Switch ($myString)
{
   {$_ -match 'match1'} {somecodeblock}
}

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

Switch -wildcard ($myString)
{
   '*match1*' {somecodeblock}
}

答案 1 :(得分:0)

switch statement的正确用法是:

Switch -regex ($myString)
{
  'match1' {somecodeblock}
  'match2' {somecodeblock}
}