2012-04-05 9 views
1

Also versuche ich physikalische Laufwerke zu Partitionen Laufwerk Buchstaben zuordnen, und DiskDriveToDiskPartition scheint wie ein guter Kandidat dafür, aber ich habe Mühe, wie die Abfrage funktionieren ich will es:WQL Syntax: DiskDriveToDiskPartition mit einem LIKE Operator

ich habe den WMI Query Builder verwendet, um den Kern der Abfrage zu erstellen:

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

Für den Anfang Visual Studio sagt mir, dass dies keine gültige Abfrage, wie es hat zu viele \ Zeichen darin, plus dort sind ungültige Anführungsstriche, die sortiert werden müssen. Zweitens würde ich einfach die WHERE-Klausel gerne lesen gerade

WHERE Antecedent LIKE \"%" + physicalDriveID + "%\" 

Die Idee ist es Variable einen PHYSICAL zu passieren, aber alles, was ich Fehler Ungültige Abfrage erhalten.

Irgendwelche Hinweise in die richtige Richtung auf diesem?

Entweder es ist sehr hilfreich, den WMI Query Builder auszuführen oder die LIKE-Klausel zu starten.

+0

Haben Sie die Lösung dafür gefunden? – sri

Antwort

1

Eine Antwort ist wahrscheinlich eine lange Zeit, aber zum Nutzen von noch immer interessiert war dies die Lösung, die ich kam. Der Trick besteht darin, die ASSOCIATORS OF Syntax der WMI-Abfrage zu verwenden. Auf diese Weise können wir die DeviceID effektiv mit Partitionen verbinden.

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 
      } 
     } 
    } 
}