【问题标题】:WQL syntax: DiskDriveToDiskPartition with a LIKE operatorWQL 语法:带有 LIKE 运算符的 DiskDriveToDiskPartition
【发布时间】:2013-07-21 05:50:54
【问题描述】:

所以我正在尝试将物理驱动器与分区匹配以驱动盘符,而 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 子句运行将非常有帮助!

【问题讨论】:

  • 您找到解决方案了吗?

标签: c# syntax wql


【解决方案1】:

答案可能需要很长时间才能得到,但为了任何仍然感兴趣的人的利益,这是我想出的解决方案。诀窍是利用 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
            }
        }
    }
}

【讨论】:

  • 感谢您的示例代码。它对我了解 WQL ASSOCIATORS OF 帮助很大。如果您的帖子来自过去的某个时间,那么现在我建议您删除 antecedent.Replace 调用,因为它用另一个反斜杠替换了反斜杠。 ;-)
  • @Valvestino:它将一个反斜杠替换为 2 个反斜杠。
  • @Thomas:我相信这将是预期的目标。事实上,第二个字面量在引号前面或引号之间都缺少了一个 @ 或 \\。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
相关资源
最近更新 更多