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。
我需要获取包含系统卷(通常是 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。