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

Powershell开关语句字符串匹配不起作用,powershell,Powershell,在我使用的Powershell脚本中,我很难让一个简单的switch语句工作。以前一直在使用嵌套的ifs,并希望清理一点。代码如下。当我在调试中遍历Powershell ISE并评估测试时(例如$u-match“match1”),它会根据$mystring的值按预期评估为true。但是,它似乎从未正确执行与开关块中的该值相关联的代码。我确信我遗漏了一些明显的东西,并感谢任何指导。希望我的描述有意义。我正在运行v5.1 提前感谢您的任何想法/建议 Switch ($myString) { ($_

在我使用的Powershell脚本中,我很难让一个简单的switch语句工作。以前一直在使用嵌套的ifs,并希望清理一点。代码如下。当我在调试中遍历Powershell ISE并评估测试时(例如$u-match“match1”),它会根据$mystring的值按预期评估为true。但是,它似乎从未正确执行与开关块中的该值相关联的代码。我确信我遗漏了一些明显的东西,并感谢任何指导。希望我的描述有意义。我正在运行v5.1

提前感谢您的任何想法/建议

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

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

不使用$时,可以完全从测试中删除它们,如果使用-wildcard参数,则可以执行此操作:

Switch -wildcard ($myString)
{
   '*match1*' {somecodeblock}
}
正确使用的方法是:


我想这可能是我愚蠢的语法错误。这种改变起了作用。谢谢你,马克。
Switch -wildcard ($myString)
{
   '*match1*' {somecodeblock}
}
Switch -regex ($myString)
{
  'match1' {somecodeblock}
  'match2' {somecodeblock}
}