我遇到了一个字符串的问题,该字符串被解析为一个证书友好名称并尝试查找它是否已经存在。当友好名称包含'*'脚本炸弹。
我知道我可以逃脱'*',但我无法控制何时将其解析为脚本。当/如果它们包含元字符时,动态转义或匹配字符串的最佳方法是什么?
# 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
}
答案 0 :(得分:0)
'*。test.com'是一个通配符模式。与-like运算符一起使用。 -match运算符使用正则表达式进行匹配,它具有与通配符匹配不同的规则和元字符。
请参阅:
Get-Help about_Wildcards
Get-Help about_Regular_Expressions
答案 1 :(得分:0)
在您的具体情况下,我认为您要测试完全匹配。在这种情况下,您应该使用-eq
运算符而不是-match
。