2008-12-11 6 views
1

J'ai un script PowerShell simple qui utilise WMI pour créer un site Web sur une boîte Vista. Oui, je sais que PowerShell dispose d'un fournisseur IIS pour travailler avec IIS 7, mais ce script doit également prendre en charge IIS 6.0, ce qui en exclut les règles. Quoi qu'il en soit, le script fonctionnait très bien, mais tout d'un coup (et je veux dire littéralement, j'ai apporté des modifications au code zéro) il a commencé à créer un second site cassé pour chaque appel à la méthode CreateNewSite. Voici le script. Quelqu'un a des idées?WMI/PowerShell Bug: pourquoi CreateSite crée-t-il * deux * sites tout d'un coup?

$path = "C:\My Path\WebSite" 
$site = "TestSite" 
$hostHeader = "demo.blah.com" 

$service = Get-WmiObject -namespace "root\MicrosoftIISv2" -class "IIsWebService" 

$bindingClass = [wmiclass]'root\MicrosoftIISv2:ServerBinding' 
$bindings = $bindingClass.CreateInstance() 
$bindings.IP = "" 
$bindings.Port = "80" 
$bindings.Hostname = $hostHeader 

$result = $service.CreateNewSite($site, $bindings, $path) 

Le script ci-dessus était créer simplement un site nommé « TestSite », mais maintenant il est aussi la création d'un site appelé « SITE_1786339847 » (le nombre change, mais il est toujours semblable à cela). J'ai parcouru le script en exécutant une ligne à la fois, et aucun site n'est créé jusqu'à ce que la méthode CreateNewSite soit invoquée. WMI est-il simplement buggé?

Répondre

1

Oups, répondu à ma propre question. J'ai vérifié le fichier de configuration IIS 7.0 brut et trouvé un répertoire virtuel orphelin qui était associé à un site avec l'ID 1786339847. Lorsque j'ai supprimé ce répertoire virtuel du fichier de configuration, le script a recommencé à fonctionner correctement.

Au cas où quelqu'un rencontrerait quelque chose de similaire, récupérez l'ID de site du gestionnaire de services Internet avant de le supprimer, puis ouvrez C: \ Windows \ system32 \ inetsrv \ config \ applicationHost.config. Analysez le fichier pour cet ID et recherchez les références orphelines. Assurez-vous d'avoir une sauvegarde en premier.