2014-01-22 7 views
1

У меня возникают проблемы со строкой, в которой анализируется имя, удобное для сертификата, и проверяется, существует ли он. Когда дружественное имя содержит «*», скрипт бомбит.Powershell Сопоставьте строку, которая может содержать asterix

Я знаю, что я мог бы избежать «*», но у меня нет контроля над тем, когда он разбирается в скрипте. Каков наилучший способ либо сбежать на лету, либо совместить строки, когда/если они содержат метасимволы?

# 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

В вашем конкретном случае, я думаю, что вы хотите, чтобы проверить точное совпадение. В этом случае вы должны использовать оператор -eq вместо -match.

Ответ mjolinor дает хорошее общее объяснение по картам whild.

+0

Thankyou - да, правильно, я не пытаюсь подстановочное совпадение, совпадение строк - это то, что мне нужно. –

1

'* .test.com' является шаблоном подстановочных знаков. Используйте это с помощью оператора. Оператор -match использует регулярное выражение для сопоставления, которое имеет разные правила и метасимволы, чем совпадение с подстановочными знаками.

См:

Get-Help about_Wildcards 
Get-Help about_Regular_Expressions 
Смежные вопросы