WMI 查询 select 包含系统卷的磁盘

WMI query to select disk containing system volume

我需要获取包含系统卷(通常是 C:)的磁盘的一些信息(型号和序列号)。我正在使用这个查询:

SELECT * FROM Win32_DiskDrive WHERE Index=0

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

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

SELECT * FROM Win32_DiskPartition WHERE BootPartition=True

然后原来的查询变为

SELECT * FROM Win32_DiskDrive WHERE Index={diskIndex}

我想这样我会很安全。总是欢迎提出更好的解决方案的建议:)

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

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

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

My question is, is the disk with Index=0 always the disk containing the system volume?

在我的例子中,答案是 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.

另外,当引导管理器位于另一个磁盘上时,您关于 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

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