WMI查询以选择包含系统卷的磁盘

时间:2016-09-15 09:24:35

标签: wmi wmi-query

我需要获取包含系统卷(通常为C :)的磁盘的一些信息(型号和串行)。我正在使用此查询:

SELECT * FROM Win32_DiskDrive WHERE Index=0

我的问题是,Index = 0的磁盘是否始终是包含系统卷的磁盘?

编辑:我添加了一个额外的查询来获取包含启动分区的磁盘索引:

SELECT * FROM Win32_DiskPartition WHERE BootPartition=True

然后原始查询更改为

SELECT * FROM Win32_DiskDrive WHERE Index={diskIndex}

我认为我这样安全。建议您寻求更好的解决方案:)

2 个答案:

答案 0 :(得分:0)

如上所述,添加额外的查询以获取包含启动分区的磁盘的索引:

{diskIndex} = SELECT * FROM Win32_DiskPartition WHERE BootPartition=True
SELECT * FROM Win32_DiskDrive WHERE Index={diskIndex}

不幸的是,WMI似乎不支持JOIN,这会使查询更有效率。

答案 1 :(得分:0)

  

我的问题是,索引= 0的磁盘是否总是包含系统卷的磁盘?

对于我来说,答案是 No 。我的系统磁盘的索引为1。 同样,您认为系统磁盘始终可引导的假设也不正确。

$ wmic os get "SystemDrive"
SystemDrive
C:
$ wmic logicaldisk where 'DeviceID="C:"' assoc /resultclass:Win32_DiskPartition

...\\DZEN\ROOT\CIMV2:Win32_DiskPartition.DeviceID="Disk #1, Partition #0"...
wmic diskdrive where 'Index=1' get "Caption"
Caption
OCZ-VERTEX4 // Yes, this is my system disk.

对于bootmanager位于另一个磁盘上的情况,您对BootPartition使用情况的假设也不正确,例如我的情况:

wmic partition where 'DeviceID like "Disk_#1%"' get DeviceID,BootPartition
BootPartition  DeviceID
FALSE          Disk #1, Partition #0

wmic partition where 'BootPartition="TRUE"' get DeviceID,BootPartition
BootPartition  DeviceID
TRUE           Disk #4, Partition #0
TRUE           Disk #3, Partition #0

如您所见,对于我的情况,可引导磁盘之一都没有系统索引= 0。实际上,对于非系统磁盘和不可引导磁盘之一,我的索引为0。