使用 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
我有以下命令
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