В WMI я могу использовать соединение (или что-то подобное), чтобы получить объект IisWebServer для сайта, учитывая имя сервера и местоположение развертывания - PullRequest
2 голосов
/ 09 февраля 2010

Учитывая имя сервера и физический путь, я хотел бы иметь возможность выследить объект IISWebServer и ApplicationPool . URL сайта также является приемлемым входом.

Нашими технологиями являются IIS 6 , WMI и доступ через C # или Powershell 2. Я уверен, что это будет проще с IIS 7 и его управляемым API . У нас этого пока нет.

Вот что я могу сделать:

Получить список виртуальных каталогов IIS из IISWebVirtualDirSetting и фильтр (в автономном режиме) для соответствующего физического пути.

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

Из объекта виртуального каталога я могу получить имя (например, W3SVC / 40565456 / root). Учитывая это имя, я могу получить другие полезности, такие как объект веб-сервера IIS .

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

Пересмотренные вопросы:

1) Это язык запросов. Можно ли присоединиться или выполнить подзапрос, чтобы 1 оператор запроса WMI получал веб-серверы на основе IISWebVirtualDir.Path? Как?

2) При решении 1 вам нужно будет объяснить, как запрашивать свойство Path. Почему это неверный запрос? "SELECT * FROM IISWebVirtualDirSetting WHERE Path='D:\sites\globaldominator'"

1 Ответ

2 голосов
/ 11 мая 2010

В WQL нет оператора JOIN.Вам нужно будет сделать это, сохранив оба запроса в переменной и выполнить некоторую постобработку.Однако, для вашего второго вопроса, вам нужно избежать обратной косой черты.Это было бы

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