WQL语法:带有LIKE运算符的DiskDriveToDiskPartition

本文关键字:运算符 DiskDriveToDiskPartition LIKE 带有 语法 WQL | 更新日期: 2023-09-27 18:30:01

所以我试图将物理驱动器与分区与驱动器号相匹配,DiskDriveToDiskPartition似乎是一个很好的候选者,但我很难让查询像我希望的那样工作:

我已经使用WMI查询生成器来创建查询的要点:

ManagementObjectSearcher searcher = new ManagementObjectSearcher("root''CIMV2", 
    "SELECT * FROM Win32_DiskDriveToDiskPartition WHERE 
    Antecedent = ''''localhost''root''cimv2:Win32_DiskDrive.DeviceID="''''''''.''''PHYSICALDRIVE3""); 

对于初学者来说,Visual Studio告诉我,这不是一个有效的查询,因为其中有太多的''字符,而且还有非法的引号需要排序。其次,我想简单地使用WHERE子句来读取

WHERE Antecedent LIKE '"%" + physicalDriveID + "%'" 

我们的想法是给它传递一个PHYSICALDRIVE变量,但我得到的只是无效查询错误。

在这一点上有没有指向正确方向的指针?

运行WMI查询生成器或运行LIKE子句将非常有用!

WQL语法:带有LIKE运算符的DiskDriveToDiskPartition

答案可能需要很长时间,但为了仍然感兴趣的人的利益,这就是我提出的解决方案。诀窍是使用WMI查询的ASSOCIATORS of语法。通过这种方式,我们可以有效地将DeviceID连接到分区。

using (ManagementObjectSearcher search = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"))
{
    // extract model and interface information
    foreach (ManagementObject drive in search.Get())
    {
        string antecedent = drive["DeviceID"].ToString(); // the disk we're trying to find out about
        antecedent = antecedent.Replace(@"'", "''"); // this is just to escape the slashes
        string query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + antecedent + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition";
        using (ManagementObjectSearcher partitionSearch = new ManagementObjectSearcher(query))
        {
            foreach (ManagementObject part in partitionSearch.Get())
            {
                //...pull out the partition information
            }
        }
    }
}