我需要获取包含系统卷(通常是C :)的磁盘的一些信息(模型和序列)。我正在使用此查询:
SELECT * FROM Win32_DiskDrive WHERE Index=0
我的问题是,Index = 0的磁盘是否总是包含系统卷的磁盘?
编辑:我添加了一个额外的查询来获取包含启动分区的磁盘的索引:
SELECT * FROM Win32_DiskPartition WHERE BootPartition=True
然后原始查询更改为
SELECT * FROM Win32_DiskDrive WHERE Index={diskIndex}
我想我会这么安全。欢迎提出更好解决方案的建议:)
我的问题是,Index = 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.
另外,关于qazxsw poi用法的假设对于启动管理器在另一个磁盘上的情况是不正确的,就像我的情况一样:
BootPartition
正如您所看到的,系统磁盘也没有一个可引导的磁盘在我的情况下没有Index = 0。实际上,对于非系统和非可引导磁盘,我有Index = 0。
如上所述,添加额外的查询以获取包含启动分区的磁盘的索引:
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
不幸的是,WMI似乎不支持JOIN,这会使查询更有效率。