2010-08-19 12 views
20

J'ai trouvé un code sur le net et j'ai essayé d'obtenir plus d'informations sur mo []. J'essaie d'obtenir toutes les informations contenues dans ManagementObjectCollection.Comment lire ManagementObject Collection dans WMI en utilisant C#

Comme le paramètre mo recherche une valeur de chaîne que je ne connais pas, comment puis-je obtenir toutes les valeurs sans connaître ses valeurs de paramètres. Ou si je veux obtenir toutes les valeurs liées à l'indexeur mo dans ManagementObjectCollection

ManagementObjectSearcher objOSDetails = new ManagementObjectSearcher("SELECT * FROM Win32_OperatingSystem"); 
ManagementObjectCollection osDetailsCollection = objOSDetails.Get(); 

foreach(ManagementObject mo in osDetailsCollection) 
{ 
    _osName = mo["name"].ToString();// what other fields are there other than name 
    _osVesion = mo["version"].ToString(); 
    _loginName = mo["csname"].ToString(); 
} 

Répondre

36

Jetez un oeil à votre requête WMI:

SELECT * FROM Win32_OperatingSystem 

Cela signifie « obtenir toutes les instances de la classe Win32_OperatingSystem et comprennent toutes les propriétés de la classe ». Ceci est un indice que les ManagementObject s sont des wrappers sur la classe WMI Win32_OperatingSystem. Voir le class description pour savoir quelles propriétés il a, ce qu'ils signifient et décider lesquels vous avez réellement besoin d'utiliser dans votre code. Si vous devez parcourir toutes les propriétés disponibles sans coder leurs noms, utilisez la propriété Properties comme Giorgi suggested. Voici un exemple:

foreach (ManagementObject mo in osDetailsCollection) 
{ 
    foreach (PropertyData prop in mo.Properties) 
    { 
     Console.WriteLine("{0}: {1}", prop.Name, prop.Value); 
    } 
} 
+0

que faire si le système est gagnant 8 ou 8.1 exécutant OS 64 bits? Quelle classe à utiliser alors! – Raulp

+2

@Raulp: Les mêmes classes. Les classes WMI sont agnostiques à la fois. – Helen