Per programmare IIS si può ricorrere non solo ad ADSI ma anche al Windows Management Interface.
Come già anticipato in alcuni post precedenti WMI è molto più veloce in fase di esecuzione di ADSI..
Il codice, che segue, mostra come conteggiare gli application Pool ed i Virtual Servers installati.
Plus aggiungo anche del codice per conteggiare gli utenti attivi in locale nella macchina su cui gira l'applicazione.

Per lavorare con WMI in .NET dobbiamo referenziare il namespace System.Management

Conteggio degli utenti in locale
private int CountUsers()
{
System.Management.ManagementScope ms = new ManagementScope(”\root\CIMv2?);
System.Management.ObjectQuery oq = new ObjectQuery(”SELECT * FROM Win32_Account where LocalAccount = true”);
ManagementObjectSearcher query1 = new ManagementObjectSearcher(ms,oq);
ManagementObjectCollection queryCollection = query1.Get();
int CountAP = 0;// parti da 0 per sicurezza
foreach (ManagementObject mo in queryCollection)
{
CountAP++;
}
return
CountAP;
}

Conteggio degli AppPool
System.Management.ManagementScope ms = new ManagementScope("\root\MicrosoftIISv2");
System.Management.ObjectQuery oq = new ObjectQuery(”Select * from IIsApplicationPool”);
ManagementObjectSearcher query1 = new ManagementObjectSearcher(ms,oq);
ManagementObjectCollection queryCollection = query1.Get();
int CountAP = 0;// parti da 0 per sicurezza
foreach(ManagementObject mo in queryCollection)
{
// Aggiungi uno per ogni pool
CountAP++;
}
return CountAP;

Conteggio dei Domini
System.Management.ManagementScope ms = new ManagementScope("\root\MicrosoftIISv2");
System.Management.ObjectQuery oq = new ObjectQuery(”SELECT * FROM IIsWebServer_IIsWebVirtualDir”);
ManagementObjectSearcher query1 = new ManagementObjectSearcher(ms,oq);
ManagementObjectCollection queryCollection = query1.Get();
int CountDomains = 0; // parti da 0 per sicurezza
foreach(ManagementObject mo in queryCollection) {
// Aggiungi uno per ogni pool
CountDomains++;
}
return CountDomains;