Benutzer mit den meisten Antworten
WMI Query auf Win32_DiskDriveToDiskPartition schlägt fehl

Frage
-
Hallo zusammen,
ich versuche gerade über WMI die Festplatten und die dazugehörigen Partitionen auszulesen.
Dies ist mein Code:
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_DiskDrive"); foreach (ManagementObject queryObj in searcher.Get()) { Console.WriteLine("Caption: {0}", queryObj["Caption"]); string qry = string.Format( "SELECT * FROM Win32_DiskDriveToDiskPartition WHERE Antecedent LIKE '%{0}%'", queryObj["DeviceID"]); ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("root\\CIMV2", qry); foreach (ManagementObject queryObj2 in searcher2.Get()) { Console.WriteLine("Caption: {0}", queryObj["Dependent"]); } }
Bei dem 2. Query erhalte ich jedoch jedes mal den Fehler, dass die Abfrage ungültig sei. Jedoch kann ich mir nicht erklären warum. Ich habe schon im Internet und hier im Forum gesucht, konnte aber noch keine funktionierende Lösung finden.
Grüße
Tobias
Antworten
-
Hallo Tobias L,
Was erwartest Du dass Dein Code machen soll? Dasselbe wie im folgenden VBS?
dim obj, objs
Set objs = GetObject("winmgmts:").InstancesOf("Win32_DiskDriveToDiskPartition")
for each obj in objs
msgbox(obj.Antecedent & vbcrlf & obj.Dependent)
next
Lies mal hier: http://www.scribd.com/doc/52635557/21/ResultRole unter Dependency Relationship
Mit folgendem Code bekommst Du neben dem Console.WriteLine("Caption: {0}", queryObj["Caption"]); die Zeilen (habe ein einzigen HDD mit zwei Partitionen):
Caption: Disk #0, Partition #0
Caption: Disk #0, Partition #1
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Management; namespace WMITest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2","SELECT * FROM Win32_DiskDrive"); foreach (ManagementObject queryObj in searcher.Get()) { Console.WriteLine("Caption: {0}", queryObj["Caption"]); //string qry = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + queryObj["DeviceID"] + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"; string qry = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + queryObj["DeviceID"] + "'} WHERE ResultRole=Dependent"; ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("root\\CIMV2",qry); foreach (ManagementObject queryObj2 in searcher2.Get()) { Console.WriteLine("Caption: {0}", queryObj2["DeviceID"]); } } } } }
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. September 2012 15:09
Alle Antworten
-
Hallo Tobias L,
Was erwartest Du dass Dein Code machen soll? Dasselbe wie im folgenden VBS?
dim obj, objs
Set objs = GetObject("winmgmts:").InstancesOf("Win32_DiskDriveToDiskPartition")
for each obj in objs
msgbox(obj.Antecedent & vbcrlf & obj.Dependent)
next
Lies mal hier: http://www.scribd.com/doc/52635557/21/ResultRole unter Dependency Relationship
Mit folgendem Code bekommst Du neben dem Console.WriteLine("Caption: {0}", queryObj["Caption"]); die Zeilen (habe ein einzigen HDD mit zwei Partitionen):
Caption: Disk #0, Partition #0
Caption: Disk #0, Partition #1
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Management; namespace WMITest { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2","SELECT * FROM Win32_DiskDrive"); foreach (ManagementObject queryObj in searcher.Get()) { Console.WriteLine("Caption: {0}", queryObj["Caption"]); //string qry = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + queryObj["DeviceID"] + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition"; string qry = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + queryObj["DeviceID"] + "'} WHERE ResultRole=Dependent"; ManagementObjectSearcher searcher2 = new ManagementObjectSearcher("root\\CIMV2",qry); foreach (ManagementObject queryObj2 in searcher2.Get()) { Console.WriteLine("Caption: {0}", queryObj2["DeviceID"]); } } } } }
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. September 2012 15:09
-
Hallo Tobias L,
Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.