使用 Select-String 的 Powershell 没有给出任何结果

Powershell using Select-String gives no results

我有以下命令

Get-WindowsDriver -Online -All |  where {$_.ClassName -like "Display"}

这给了我这样的结果

Driver           : vrd.inf
OriginalFileName : C:\Windows\System32\DriverStore\FileRepository\vrd.inf_amd64_3a0ba97737bffd01\vrd.inf
Inbox            : True
ClassName        : Display
BootCritical     : False
ProviderName     : Microsoft
Date             : 6/21/2006 12:00:00 AM
Version          : 10.0.18362.329

Driver           : wvmbusvideo.inf
OriginalFileName : C:\Windows\System32\DriverStore\FileRepository\wvmbusvideo.inf_amd64_483a786e00a2cb7a\wvmbusvideo.inf
Inbox            : True
ClassName        : Display
BootCritical     : False
ProviderName     : Microsoft
Date             : 6/21/2006 12:00:00 AM
Version          : 10.0.18362.1

现在我只想提取两个结果的 OriginalFileName 行,所以我的输出看起来像这样

OriginalFileName : C:\Windows\System32\DriverStore\FileRepository\vrd.inf_amd64_3a0ba97737bffd01\vrd.inf
OriginalFileName : C:\Windows\System32\DriverStore\FileRepository\wvmbusvideo.inf_amd64_483a786e00a2cb7a\wvmbusvideo.inf

现在为了得到上面的结果我可以这样做

Get-WindowsDriver -Online -All |  where {$_.ClassName -like "Display"} | findstr OriginalFileName

但是上述命令的问题是 findstr 对我所读的内容有字符限制,因为一些路径被切断了。因此,为了解决这个问题,我正在尝试使用 Select-String。这就是我正在做的

Get-WindowsDriver -Online -All |  where {$_.ClassName -like "Display"} | Select-String -Pattern "OriginalFileName" 

但我没有得到任何结果。关于我可能做错了什么的任何建议?

因为 Get-WindowsDriver returns objects (Microsoft.Dism.Commands.BasicDriverObject and/or Microsoft.Dism.Commands.AdvancedDriverObject), 你不应该使用Select - 用于查找单个 属性 这些对象的字符串。

只是return他们喜欢

(Get-WindowsDriver -Online -All |  Where-Object {$_.ClassName -like "Display*"}).OriginalFileName

如果您希望输出看起来像 PropertyName: PropertyValue,您可以使用

Get-WindowsDriver -Online -All |  Where-Object {$_.ClassName -like "Display*"} | 
                                  Select-Object OriginalFileName | Format-List

有时 findstr 是一种很好的搜索技术。 /i 使其不区分大小写。

有时 select-string 或 { $_ -match 'whatever' } 起作用。这取决于对象如何转换为字符串。

[pscustomobject]@{name='joe'},[pscustomobject]@{name='bill'} | select-string b

@{name=bill}


[pscustomobject]@{name='joe'},[pscustomobject]@{name='bill'} | where { $_ -match 'b' }

name
----
bill

不幸的是,get-windowsdriver 只是转换为“Microsoft.Dism.Commands.BasicDriverObject”:

$a = Get-WindowsDriver -Online -All | where ClassName -eq Display
$a[0].ToString()

Microsoft.Dism.Commands.BasicDriverObject


$a | select-string dism

Microsoft.Dism.Commands.BasicDriverObject
Microsoft.Dism.Commands.BasicDriverObject
Microsoft.Dism.Commands.BasicDriverObject