Привязки сервера IIS 6 с WMI и Powershell v2 - PullRequest
0 голосов
/ 30 января 2010

У меня уже давно есть куча автоматизированных систем VBS для IIS 6, в том числе одна, которая получает / устанавливает сложные привязки серверов на нескольких фермах парных серверов, каждая из которых имеет десятки приложений, каждое из которых имеет 3-12 заголовков узлов. Каждое приложение имеет имя хоста, полное имя хоста и имя хоста с включенным аварийным восстановлением, поэтому они могут быть беспорядочными для обслуживания вручную.

Я делал все свои vbs с помощью ADSI, но я думаю, что WMI, вероятно, более гибок, чем ADSI, с точки зрения полного обслуживания сервера. Пожалуйста, поправьте меня, если я ошибаюсь. Поэтому сейчас я пытаюсь перейти на PowerShell + WMI, чтобы подготовиться к Windows 2008 + IIS 7.5. Мне нравится учебный процесс, но я столкнулся с проблемой на этом пути.

Я могу получить / установить все свойства через WMI на моих веб-серверах IIS 6, кроме ServerBindings. Я чувствую, что я близко, но мне не хватает некоторого слоя сдерживания, и я просто не могу заставить объекты, которые я строю, перенаправить на нужный объект автоматизации.

Следующий код получает и читает ServerBindings просто отлично. Я просто не могу найти способ записать свои изменения обратно. Любой совет приветствуется.

$objWMI = [WmiSearcher] "Select * From IISWebServerSetting"
$objWMI.Scope.Path = "\\" + $server + "\root\microsoftiisv2" 
$objWMI.Scope.Options.Authentication = 6 
$sites = $objWMI.Get() 
foreach ($site in $sites)
{
    $bindings = $site.psbase.properties | ? {$_.Name -contains "ServerBindings"} 
    foreach ($pair in $bindings.Value.GetEnumerator())
    {
        # The pair object is a single binding and contains the correct data
        $pair
        $pair.IP    
        $pair.Port
        $pair.Hostname
        # And this line will successfully erase the contents of 
        # the ServerBindings
        $bindings.Value = @{}
        # but I can't figure out what to do to update $bindings.Value
    }
    $site.Put()
}

Мне нравится Powershell, так что спасибо за любую помощь, которую вы можете предложить.

1 Ответ

1 голос
/ 04 февраля 2010

Хорошо. Я отвлекся от серьезных сбоев диска. Веселье никогда не прекращается.

В любом случае, решение этой проблемы проще, чем я это сделал:

process
{
    $bindings = $_.ServerBindings
    foreach ($binding in $bindings)
    {
        $binding.IP = $ip
        $binding.Port = $port
        $binding.Hostname = $hostname
    }
    $_.ServerBindings = $bindings
    $_.Put()
}

ServerBindings - это массив, но ему нравится быть массивом своего рода. Я пытался создать массив с нуля, но мой самодельный массив не пахнул прямо для Powershell. Итак, вытащите массив из ServerBindings в новую переменную, манипулируйте этой переменной, а затем присвойте эту переменную обратно свойству ServerBindings. Это сохраняет все правильное печатание на месте. Он гладкий, как шелк, и кажется проще, чем ADSI.

...