为什么Powershell不过滤对象的toString方法的输出?
Get-ChildItem cert:\localmachine\my | % { Select-String -InputObject $_.ToString() -Pattern 'testcert' -SimpleMatch }
相反,我只需要运行即可获得一切
Get-ChildItem cert:\localmachine\my | % { $_.ToString() }
我期望像grep
或findstring
那样,我只会得到与正则表达式匹配的行。
人们会认为,一旦调用$_.ToString()
,您只会得到字符串输出...相反,我只是得到对象还是字符串数组?
答案 0 :(得分:1)
Select-String
适用于单个字符串 ...,而您只是给出了它-单个多行字符串。 [咧嘴]
如果要在证书的属性中匹配某个字符串,请使用Where-Object {$_.PropName -match 'TestValue'}
获取包含指定属性中测试值的对象。
答案 1 :(得分:0)
Lee_Daily已经为您提供了答案,但是您还执行了以下操作...
(Get-ChildItem cert:\localmachine\my) -match 'testcert'
其中一台测试机上的示例
Get-ChildItem cert:\localmachine\my
PSParentPath: Microsoft.PowerShell.Security\Certificate::localmachine\my
Thumbprint Subject
---------- -------
FEB8E79E06... CN=NVIDIA GameStream Server
D2D983C386... CN=Windows Admin Center
96A0413F93... CN=Windows Admin Center
5299896B41... CN=localhost
(Get-ChildItem cert:\localmachine\my) -match 'admin'
PSParentPath: Microsoft.PowerShell.Security\Certificate::localmachine\my
Thumbprint Subject
---------- -------
D2D983C386... CN=Windows Admin Center
96A0413F93... CN=Windows Admin Center
(Get-ChildItem cert:\localmachine\my) -match 'localhost'
PSParentPath: Microsoft.PowerShell.Security\Certificate::localmachine\my
Thumbprint Subject
---------- -------
5299896B41... CN=localhost