我正在尝试过滤 wmic 列表的结果,where-object
但不幸的是这似乎不起作用。
wmic diskdrive list brief | Where-Object -Property "Caption" -Contains "Samsung"
过滤后的结果为空,未过滤的结果是这样的:
Caption DeviceID Model Partitions Size
HGST HUH721212ALE600 \\.\PHYSICALDRIVE1 HGST HUH721212ALE600 1 12000132426240
OCZ-VERTEX3 \\.\PHYSICALDRIVE3 OCZ-VERTEX3 1 240054796800
Samsung SSD 970 EVO Plus 1TB \\.\PHYSICALDRIVE5 Samsung SSD 970 EVO Plus 1TB 4 1000202273280
ST16000NM001G-2KK103 \\.\PHYSICALDRIVE4 ST16000NM001G-2KK103 1 16000900392960
ST6000NM0024-1HT17Z \\.\PHYSICALDRIVE0 ST6000NM0024-1HT17Z 1 6001172513280
Samsung SSD 840 PRO Series \\.\PHYSICALDRIVE2 Samsung SSD 840 PRO Series 1 512105932800
如何正确过滤?
最后,我想得到DeviceID
,例如,PHYSICALDRIVE5
WMIC 不是 PowerShell cmdlet,不包含
Where-Object
要查找的属性。您可以通过尝试将您的命令传送到
Get-Member
.使用
Select-String
其他答案中提到的方法是过滤 PowerShell 中任何输出的好方法,值得记住。您还可以从 PowerShell cmdlet 获取从 WMIC 获取的信息,然后所有 PowerShell 筛选和属性命令都会生效。
在我的带有 AMD 的系统上运行它会产生:
命令分解
获取 CimInstance
添加了 CIM Cmdlet 作为 WMI Cmdlet 的替代品。CIM 代表通用信息模型,在此实例中用于访问有关 Windows 的标准化信息集。DMTF RedGate MS CimCmdlets
Win32_DiskDrive
可供查询的 CIM 类之一。有许多 CIM 类。尝试
Get-CimClass Win32*
了解以 Win32 为前缀的可用 CIM 类的类型。|
管道。将左侧的输出发送到右侧的命令。
Where-对象
Where-Object 可用于过滤已通过管道传输到它的 PowerShell 输出。要查看可以过滤的对象类型,请将您的命令传递给
Get-Member
first,它将显示可能对象的列表。{$_.Caption 类似“三星”}
$_
是self的 PowerShell 语法。指的是管道输入。.Caption
$_
我们要查询的成员对象-like
允许通配符模式的 PowerShell 比较运算符PS 运算符"*samsung*"
我们的搜索字符串,通配符星号在我们的字符串前面和后面,以确保我们在输出中的任何位置匹配samsung 。省略前导通配符将显示仅以samsung开头的结果。我正在尝试过滤
wmic
列表的结果,where-object
但这不起作用。要查找包含字符串“Samsung”的行,请使用以下命令:
使用您的示例,它应该返回:
这并不能直接回答您的问题。[ grin ] 但是,它提供了您使用的 WMIC.exe 调用的更“powershell-ish”版本。
它能做什么 ...
使用WMIC“DeviceID”项似乎映射到“.DiskNumber”属性的所需属性构建一个新对象。
这是代码...
输出 ...