Powershell匹配可能包含asterix的字符串

时间:2014-01-22 23:29:02

标签: powershell

我遇到了一个字符串的问题,该字符串被解析为一个证书友好名称并尝试查找它是否已经存在。当友好名称包含'*'脚本炸弹。

我知道我可以逃脱'*',但我无法控制何时将其解析为脚本。当/如果它们包含元字符时,动态转义或匹配字符串的最佳方法是什么?

# this does not work
# Bad argument to operator '-match': parsing "*.test.com" - Quantifier {x,y} following nothing..
if(Get-ChildItem cert:\ -Recurse | Where-Object {$_.FriendlyName -and $_.FriendlyName -match '*.test.com'} | Select-Object -First 1) { 
  exit 1 
} else { 
  exit 0 
}

# this works fine
if(Get-ChildItem cert:\ -Recurse | Where-Object {$_.FriendlyName -and $_.FriendlyName -match 'string.test.com'} | Select-Object -First 1) { 
  exit 1 
} else { 
  exit 0 
}

2 个答案:

答案 0 :(得分:0)

'*。test.com'是一个通配符模式。与-like运算符一起使用。 -match运算符使用正则表达式进行匹配,它具有与通配符匹配不同的规则和元字符。

请参阅:

Get-Help about_Wildcards
Get-Help about_Regular_Expressions

答案 1 :(得分:0)

在您的具体情况下,我认为您要测试完全匹配。在这种情况下,您应该使用-eq运算符而不是-match

mjolinor的回答提供了关于whild卡的一般解释。