在本地商店搜索通配符证书?
Searching for wildcard certificate in local store?
我有一个例程在我的证书库中搜索与主题名称匹配的证书...例如,我有一个主题为 foobar.blah.com 的证书,我的脚本是这样做的:
(Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -match "foobar.blah.com"})
这按预期工作...即找到条目。
但是,我正在尝试对官方通配符证书执行相同的过程,例如 *.blah.com 但尝试使用相同的语法失败。
我尝试使用其他形式的搜索选项(-like、-contains 等),但似乎没有任何效果。
有关如何执行此操作的任何提示?
-match
期望将正则表达式模式作为其右侧参数。在正则表达式中,*
是一个量词,意思是“0 或更多”。要匹配文字字符 *
,请将其转义为 \
:
{ $_.Subject -match '\*\.blah\.com'}
.
也是一个特殊字符(匹配任意单个字符)
如果您不确定要转义哪些字符,请使用 [regex]::Escape()
方法:
$Pattern = [regex]::Escape('*.blah.com')
Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -match $Pattern}
我有一个例程在我的证书库中搜索与主题名称匹配的证书...例如,我有一个主题为 foobar.blah.com 的证书,我的脚本是这样做的:
(Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -match "foobar.blah.com"})
这按预期工作...即找到条目。
但是,我正在尝试对官方通配符证书执行相同的过程,例如 *.blah.com 但尝试使用相同的语法失败。
我尝试使用其他形式的搜索选项(-like、-contains 等),但似乎没有任何效果。 有关如何执行此操作的任何提示?
-match
期望将正则表达式模式作为其右侧参数。在正则表达式中,*
是一个量词,意思是“0 或更多”。要匹配文字字符 *
,请将其转义为 \
:
{ $_.Subject -match '\*\.blah\.com'}
.
也是一个特殊字符(匹配任意单个字符)
如果您不确定要转义哪些字符,请使用 [regex]::Escape()
方法:
$Pattern = [regex]::Escape('*.blah.com')
Get-ChildItem -Path Cert:\LocalMachine\My | Where-Object {$_.Subject -match $Pattern}