2010-02-09 21 views
2

Étant donné un nom de serveur et un chemin physique, j'aimerais pouvoir traquer l'objet IISWebServer et ApplicationPool. L'URL du site Web est également une entrée acceptable.Dans WMI, puis-je utiliser une jointure (ou quelque chose de similaire) pour acquérir l'objet IisWebServer pour un site, nom de serveur donné et emplacement de déploiement

Nos technologies sont IIS , WMI, et l'accès via C# ou Powershell 2. Je suis certain que ce serait plus facile avec IIS 7 its managed API. Nous ne l'avons pas encore.

Voici ce que je peux faire:

obtenir une liste des répertoires virtuels IIS de IISWebVirtualDirSetting et filtre (hors ligne) pour le chemin physique correspondant.

$theVirtualDir = gwmi -Namespace "root/MicrosoftIISv2" ` 
    -ComputerName $servername -authentication PacketPrivacy ` 
    -class "IISWebVirtualDirSetting" ` 
    | where-object {$_.Path -like $deployLocation} 

de l'objet répertoire virtuel, je peux obtenir un nom (comme W3SVC/40565456/root). Compte tenu de ce nom, je peux obtenir d'autres goodies, tels que le IIS web server object.

gwmi -Namespace "root/MicrosoftIISv2" ` 
    -ComputerName $servername ` 
    -authentication PacketPrivacy ` 
    -Query "SELECT * FROM IisWebServer WHERE Name='W3SVC/40589473'" 

Les questions, retraitée:

1) C'est un langage de requête. Puis-je joindre ou sous-requête afin que 1 requête WMI obtient des serveurs Web basés sur IISWebVirtualDir.Path? Comment?

2) En résolvant 1, vous devrez expliquer comment interroger la propriété Path. Pourquoi est-ce une requête invalide? "SELECT * FROM IISWebVirtualDirSetting WHERE Path='D:\sites\globaldominator'"

Répondre

2

En WQL, il n'y a pas d'opérateur JOIN. Vous devrez le faire en enregistrant les deux requêtes dans une variable et en effectuant un post-traitement. Cependant, pour votre deuxième question, vous devez échapper aux barres obliques inverses. Ce serait

"SELECT * FROM IISWebVirtualDirSetting WHERE Path='D:\\sites\\globaldominator'"