Questa mattina ho avuto l' esigenza di dover visionare quello che era l' attuale inventario Hardware presente e collegato in Rete. Cosa meglio del WMI per gestire il tutto?

String strScope = "\\" + "\\" + this.txtName.Text + "\\root\\cimv2"
ConnectionOptions options = new ConnectionOptions();
options.Impersonation = System.Management.ImpersonationLevel.Impersonate;
options.Username = this.txtUsername.Text;
options.Password = this.txtPassword.Text;
ManagementScope theScope = new ManagementScope(strScope,options);
String strQuery = "SELECT * FROM Win32_Processor"
ObjectQuery theQuery = new ObjectQuery(strQuery);
ManagementObjectSearcher theSearcher = new ManagementObjectSearcher(theScope, theQuery);
ManagementObjectCollection coll = theSearcher.Get();
insertRow("Machine Info","","",true);
foreach(ManagementObject current in coll)
{
System.Diagnostics.Debug.WriteLine(current["Name"].ToString());
insertRow("Processor",current["Manufacturer"].ToString(),current["Name"].ToString(),false);
}

Con questa query, possiamo prelevare tutta una serie di informazioni residenti nella macchina, in questo caso quelle relative il processore. La cosa che ritengo piu' utile è il poter usare delle credenziali diverse da quelle del computer in uso, ma solamente per le query su PC remoti, non per quello locale.

Peccato che l' unica cosa che non si riesce a querare sono gli Utenti loggati in un Terminal Server ... Mi serviva proprio quello ...

Infine vi ricordo che il tutto non viene supportato su PC che montano un S.O. NT4, si per XP e 2003 e forse anche 2000.
E come potete vedere il tutto lo sto facendo con il bellissimo C# (ma VB.NET mi manca tanto ...).