2010-08-19 19 views
20

Ho trovato un codice in rete e ho cercato di ottenere ulteriori informazioni su mo [].Come leggere ManagementObject Collection in WMI utilizzando C#

Sto cercando di ottenere tutte le informazioni contenute in ManagementObjectCollection.

Poiché il parametro mo è in cerca di un valore stringa che non so, come posso ottenere tutti i valori senza conoscere i valori dei parametri. O se voglio ottenere tutti i valori relativi alla indicizzatore mo in 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(); 
} 

risposta

36

Date un'occhiata alla vostra query WMI:

SELECT * FROM Win32_OperatingSystem 

Significa "ottenere tutte le istanze della classe Win32_OperatingSystem e comprendono tutte le proprietà della classe". Questo è un indizio del fatto che i risultanti ManagementObject s sono wrapper sulla classe WMI Win32_OperatingSystem. Guarda lo class description per sapere quali proprietà ha, cosa significano e decidere quali effettivamente hai bisogno di usare nel tuo codice.

Se è necessario scorrere tutte le proprietà disponibili senza dover codificare i loro nomi, utilizzare la proprietà Properties come Giorgi suggested. Ecco un esempio:

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

cosa succede se il sistema è win 8 o 8.1 con sistema operativo a 64 bit? Quale classe utilizzare! – Raulp

+2

@Raulp: le stesse classi. Le classi WMI sono indipendenti dai testimoni. – Helen