为什么Select-String不过滤ToString()方法的输入?

时间:2019-04-10 23:07:25

标签: powershell windows-10 select-string

为什么Powershell不过滤对象的toString方法的输出?

Get-ChildItem cert:\localmachine\my | % { Select-String -InputObject $_.ToString() -Pattern 'testcert' -SimpleMatch }

相反,我只需要运行即可获得一切

Get-ChildItem cert:\localmachine\my | % { $_.ToString() }

我期望像grepfindstring那样,我只会得到与正则表达式匹配的行。

人们会认为,一旦调用$_.ToString(),您只会得到字符串输出...相反,我只是得到对象还是字符串数组?

2 个答案:

答案 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