【问题标题】:WMI query to select disk containing system volumeWMI 查询以选择包含系统卷的磁盘
【发布时间】:2016-09-15 09:24:34
【问题描述】:

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

SELECT * FROM Win32_DiskDrive WHERE Index=0

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

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

SELECT * FROM Win32_DiskPartition WHERE BootPartition=True

然后原来的查询变成了

SELECT * FROM Win32_DiskDrive WHERE Index={diskIndex}

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

【问题讨论】:

    标签: wmi wmi-query


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      我的问题是,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.
      

      此外,当 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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多