使用选择字符串的Powershell不会给出任何结果



>我有以下命令

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

这给了我这样的结果

Driver           : vrd.inf
OriginalFileName : C:WindowsSystem32DriverStoreFileRepositoryvrd.inf_amd64_3a0ba97737bffd01vrd.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:WindowsSystem32DriverStoreFileRepositorywvmbusvideo.inf_amd64_483a786e00a2cb7awvmbusvideo.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:WindowsSystem32DriverStoreFileRepositoryvrd.inf_amd64_3a0ba97737bffd01vrd.inf
OriginalFileName : C:WindowsSystem32DriverStoreFileRepositorywvmbusvideo.inf_amd64_483a786e00a2cb7awvmbusvideo.inf

现在要获得上述结果,我可以这样做

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

但是上述命令的问题在于 findstr 与我所阅读的内容相比有字符限制,因此某些路径被切断了。所以为了解决这个问题,我正在尝试使用选择字符串。这就是我正在做的

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

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

由于 Get-WindowsDriver 返回对象(Microsoft.Dism.Commands.BasicDriverObject 和/或 Microsoft.Dism.Command.AdvancedDriverObject(,因此不应使用 Select-String 来查找这些对象的单个属性。

只需像

(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使其不区分大小写。

有时选择字符串或 { $_ -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.Command.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

相关内容

  • 没有找到相关文章

最新更新