У меня есть простой сценарий PowerShell, который использует WMI для создания веб-сайта в системе Vista. Да, я знаю, что PowerShell имеет поставщика IIS для работы с IIS 7, но этот сценарий также должен поддерживать IIS 6.0, так что это исключает.
Как бы то ни было, скрипт работал нормально, но внезапно (я имею в виду, что буквально я не внес никаких изменений кода в скрипт) он начал создавать второй, неработающий сайт для каждого вызова метода CreateNewSite. Ниже приведен сценарий. У кого-нибудь есть идеи?
$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)
Приведенный выше сценарий был просто создает сайт с именем «TestSite», но теперь он также создает сайт с именем «SITE_1786339847» (номер меняется, но он всегда похож на этот). Я прошел через сценарий, выполняя по одной строке за раз, и ни один сайт не создается, пока не будет вызван метод CreateNewSite. WMI просто глючит?


Упс, ответил на свой вопрос. Я проверил необработанный файл конфигурации IIS 7.0 и обнаружил потерянный виртуальный каталог, связанный с сайтом с идентификатором 1786339847. Когда я удалил этот виртуальный каталог из файла конфигурации, сценарий снова начал работать правильно.
Если кто-то столкнется с чем-то похожим, возьмите идентификатор плохого сайта из диспетчера IIS перед его удалением, затем откройте C: \ Windows \ system32 \ inetsrv \ config \ applicationHost.config. Просканируйте файл на предмет этого идентификатора и найдите любые ссылки на него, потерявшие привязку. Сначала убедитесь, что у вас есть резервная копия.