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
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开头的结果。wmic列表的结果,where-object但这不起作用。我正在使用:
Run Code Online (Sandbox Code Playgroud)wmic diskdrive list brief | Where-Object -Property "Caption" -Contains "Samsung"
要查找包含字符串“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)
| 归档时间: |
|
| 查看次数: |
1042 次 |
| 最近记录: |