none
WMI Query auf Win32_DiskDriveToDiskPartition schlägt fehl RRS feed

  • 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

    Donnerstag, 30. August 2012 10:26

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.

    Donnerstag, 6. September 2012 17:24
    Moderator

Alle Antworten