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子句将非常有用!
答案可能需要很长时间,但为了仍然感兴趣的人的利益,这就是我提出的解决方案。诀窍是使用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
}
}
}
}