如何正确过滤 wmic 磁盘驱动器列表

Sol*_*eil 4 powershell wmi wmic

我正在尝试过滤 wmic 列表的结果,where-object但不幸的是这似乎不起作用。

wmic diskdrive list brief  | Where-Object -Property "Caption" -Contains "Samsung"
Run Code Online (Sandbox Code Playgroud)

过滤后的结果为空,未过滤的结果如下:

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
Run Code Online (Sandbox Code Playgroud)

如何正确过滤?

最后,我想得到DeviceID,例如,PHYSICALDRIVE5

Jim*_* II 8

WMIC 不是 PowerShell cmdlet,并且不包含Where-Object正在查找的属性。

您可以通过尝试将命令通过管道传输到Get-Member.

使用Select-String另一个答案中提到的方法是在 PowerShell 中过滤任何输出的好方法,值得记住。

您还可以从 PowerShell cmdlet 中获取从 WMIC 获取的信息,然后所有 PowerShell 过滤和属性命令都将活跃起来。

Get-CimInstance Win32_DiskDrive | Where-Object {$_.Caption -like "*samsung*" }
Run Code Online (Sandbox Code Playgroud)

在我的系统上使用 AMD 运行它会产生:

PS C:\Users\ishmael> Get-CimInstance Win32_DiskDrive | Where-Object {$_.Caption -like "*AMD*" }

DeviceID           Caption                                   Partitions Size          Model
--------           -------                                   ---------- ----          -----
\\.\PHYSICALDRIVE2 AMD-RAID Samsung SSD 970 SCSI Disk Device 3          1000202273280 AMD-RAID Samsung SSD 970 SCSI Disk Device
\\.\PHYSICALDRIVE1 AMD-RAID Array 2  SCSI Disk Device        1          999091860480  AMD-RAID Array 2  SCSI Disk Device
Run Code Online (Sandbox Code Playgroud)

命令分解

获取 CimInstance

添加了 CIM Cmdlet 作为 WMI Cmdlet 的替代品。CIM 代表通用信息模型,在此实例中用于访问有关 Windows 的标准化信息集。DMTF RedGate MS CimCmdlets

Win32_磁盘驱动器

可用于查询的 CIM 类之一。有许多 CIM 课程。尝试Get-CimClass Win32*了解以 Win32 为前缀的可用 CIM 类的类型。

|

管道。将左侧的输出发送到右侧的命令。

哪里-对象

Where-Object 可用于过滤通过管道传输到它的 PowerShell 输出。要查看可以过滤的对象类型,请将您的命令通过管道传输到Get-Member第一个,这将显示可能对象的列表。

{$_.Caption 类似“三星”}

  • $_self的 PowerShell 语法。指的是管道输入。
  • .Caption$_我们要查询的成员对象
  • -likePowerShell 比较运算符,允许通配符模式PS 运算符
  • "*samsung*"我们的搜索字符串,通配符星号在我们的字符串之前和之后,以确保我们匹配输出中的任何地方的三星。省略前导通配符将显示仅以samsung开头的结果。


Dav*_*ill 5

我正在尝试过滤wmic列表的结果,where-object但这不起作用。

我正在使用:

wmic diskdrive list brief  | Where-Object -Property "Caption" -Contains "Samsung"
Run Code Online (Sandbox Code Playgroud)

要查找包含字符串“Samsung”的行,请使用以下命令:

wmic diskdrive list brief  | select-string -pattern "Samsung*"
Run Code Online (Sandbox Code Playgroud)

使用您的示例,它应该返回:

Samsung SSD 970 EVO Plus 1TB  \\.\PHYSICALDRIVE5  Samsung SSD 970 EVO Plus 1TB  4           1000202273280
Samsung SSD 840 PRO Series    \\.\PHYSICALDRIVE2  Samsung SSD 840 PRO Series    1           512105932800
Run Code Online (Sandbox Code Playgroud)