Обновление Powershell IIS Bindings - PullRequest
16 голосов
/ 17 июня 2011

Я пытаюсь обновить http-привязку на определенном сайте, с которой я могу сделать:

Set-ItemProperty "IIS:\Sites\SiteName" -Name bindings -Value @{protocol="http";bindingInformation=*:80:hostname.site.net}

Проблема, с которой я столкнулся, заключается в том, что эта команда полностью заменяет информацию о привязке, поэтому, если естьэто HTTPS-привязка, после чего она удаляется с помощью Set-ItemProperty.

Кто-нибудь знает способ просто обновить определенную привязку, такую ​​как HTTP, без необходимости удалять другие или заново создавать всю строку привязки?

Ответы [ 5 ]

17 голосов
/ 03 мая 2012

Действия по ОБНОВЛЕНИЮ привязки в коллекции привязок веб-сайта. Процесс состоит в том, чтобы получить коллекцию привязок веб-сайта, изменить конкретную привязку и затем снова установить всю коллекцию.

Function ReplaceWebsiteBinding {

    Param(
        [string] $sitename,
        [string] $oldBinding,
        [string] $newValue
    );
    import-module webadministration;
    $wsbindings = (Get-ItemProperty -Path "IIS:\Sites\$sitename" -Name Bindings)
    for($i=0;$i -lt ($wsbindings.Collection).length;$i++){
        if((($wsbindings.Collection[$i]).bindingInformation).Contains($oldBinding)){
            ($wsbindings.Collection[$i]).bindingInformation = $newValue;
        }
    }
    Set-ItemProperty -Path "IIS:\Sites\$sitename" -Name Bindings -Value $wsbindings
}

ReplaceWebsiteBinding "Default Web Site" "*:80:" "192.168.1.101:80:SomeHostHeader.domain";

[примечание: отредактировано 20131016: очистить ответ для более удобного просмотра] [примечание: отредактировано 20160817: исправлено определение типа переменной param]

15 голосов
/ 09 сентября 2012

Вот еще одна синтаксическая форма.Я предпочитаю этот, потому что он кажется более естественным.Если у вас еще не загружен модуль PS веб-администрирования, сначала импортируйте его (import-module webadministration).

New-WebBinding -name test03 -port 443 -Protocol https -HostHeader test03.int -IPAddress "*"
4 голосов
/ 09 ноября 2017

Вот сценарий Powershell, который я недавно написал, который можно адаптировать для выполнения ваших задач:

# Updates IIS bindings across all sites by replacing all occurrences
# of $searchString for $replaceString in the binding host header.
# Note that the search and replace is case insensitive.

$searchString = "ovh-ws0"
$replaceString = "ovh-ws1"
foreach ($website in Get-Website) {
    "Site: {0}" -f $website.name
    $bindings = Get-WebBinding -Name $website.name
    foreach ($binding in $website.bindings.Collection) {
        $bindingInfo = $binding.bindingInformation
        "    Binding: {0}" -f $bindingInfo
        if ($bindingInfo -imatch $searchString) {
            $oldhost = $bindingInfo.Split(':')[-1]
            $newhost = $oldhost -ireplace $searchString, $replaceString
            "        Updating host: {0} ---> {1}" -f $oldhost, $newhost
            Set-WebBinding -Name $website.name -BindingInformation $bindingInfo -PropertyName "HostHeader" -Value $newhost
        }
    }
}

И это пример вывода из приведенного выше сценария:

Site: alpha
    Binding: 100.101.102.103:80:alpha.redacted.com
    Binding: 100.101.102.103:80:ovh-ws0-alpha.redacted.com
        Updating host: ovh-ws0-alpha.redacted.com ---> ovh-ws1-alpha.redacted.com
    Binding: 100.101.102.103:443:ovh-ws0-alpha.redacted.com
        Updating host: ovh-ws0-alpha.redacted.com ---> ovh-ws1-alpha.redacted.com
    Binding: 100.101.102.103:443:alpha.redacted.com
Site: beta
    (etc)
Site: release
    (etc)

Конечно, скрипт может быть адаптирован для изменения привязок другими способами.Например, следующий скрипт обновит IP-адреса:

# Updates IIS bindings across all sites by replacing all IP addresses from $oldIP to $newIP.

$oldIP = "100.101.102.103"
$newIP = "*"
foreach ($website in Get-Website) {
    "Site: {0}" -f $website.name
    $bindings = Get-WebBinding -Name $website.name
    foreach ($binding in $website.bindings.Collection) {
        $bindingInfo = $binding.bindingInformation
        "    Binding: {0}" -f $bindingInfo
        if ($bindingInfo -imatch $oldIP) {
            "        Updating IP: {0} ---> {1}" -f $oldIP, $newIP
            Set-WebBinding -Name $website.name -BindingInformation $bindingInfo -PropertyName "IPAddress" -Value $newIP
        }
    }
}
2 голосов
/ 08 января 2014

Set-WebBinding -Name 'Веб-сайт по умолчанию' -BindingInformation "*: 80:" -PropertyName Port -Value 12

Subrat

1 голос
/ 13 февраля 2015

Используйте «New-ItemProperty» для добавления, используйте «Set-ItemProperty» для обновления существующего.

http://www.iis.net/learn/manage/powershell/powershell-snap-in-making-simple-configuration-changes-to-web-sites-and-application-pools

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...