Set-ItemProperty для http удаляет существующие привязки для веб-сайта в IIS - PullRequest
0 голосов
/ 04 января 2019

Одно из моих приложений (скажем, app1), работающее под веб-сайтом в IIS, создало привязку https во время развертывания. Однако, когда другое приложение (скажем, app2) на том же веб-сайте недавно развернулось с помощью сценария Power Shell, оно удалило ранее добавленную привязку https и сломало app1.

Когда я посмотрел сценарий развертывания app2, я понял, что есть функция, позволяющая проверить, существует ли привязка, - если да, просто вызовите Set-ItemProperty, чтобы обновить эту привязку или создать ее. Эта идея выглядит хорошо для меня - в основном это говорит о создании привязки, специфичной для приложения, или обновлении, если оно уже существует. Но я не уверен, почему Set-ItemProperty для http удалена https привязка (на самом деле все остальные, а также net.tcp, net.pipe и т. Д.)

Ниже приведен function из этого сценария развертывания.

Import-Module -Name WebAdministration
    function SetBindingsIIS
    {
    param
    (
       [Parameter(Mandatory)]
       [ValidateNotNullOrEmpty()]
       [string]$WebsiteName,
       [HashTable]$protocol
    )
    $Status=$null
    $GetProtocolName= $protocol["Protocol"]
    $BindingsCollection=Get-ItemProperty -Path "IIS:\Sites\$WebsiteName" -Name Bindings 
    $ProtocolExists=$BindingsCollection.Collection | Where-Object{$_.protocol -eq $GetProtocolName}
        Try
        {
            if($ProtocolExists -eq $null)
            {
                New-ItemProperty -Path IIS:\Sites\$WebsiteName -Name Bindings -Value $protocol -Force
            }
            else
            {
                Set-ItemProperty -Path "IIS:\Sites\$WebsiteName" -Name Bindings -Value $protocol -Force
            }
            $Status="Success"
        }
        Catch
        {
            $ErrorMessage=$_.Exception.Message        
            $Status="Error in Add/Update bindings : $ErrorMessage"
        }

        return $Status
    }

Запуск этой функции просто удаляет все существующие привязки, уже настроенные для веб-сайта в IIS

SetBindingsIIS -WebsiteName "TestMiddleTierSite" -protocol @{Protocol="http";BindingInformation=":81:"}

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Хотя ответ @ boxdog является правильным и рекомендуемым: можно добавить привязку, используя * -ItemProperty и IIS: PSDrive. Только не используйте Set -ItemProperty, но New -ItemProperty для добавления нового свойства в коллекцию:

New-ItemProperty 'IIS:\Sites\Default Web Site' -Name bindings -Value @{protocol='http'; bindingInformation='*:81:'}
0 голосов
/ 04 января 2019

Причина, по которой он удаляет все ваши привязки, заключается в том, что он берет все, что вы передаете $Protocol, и перезаписывает свойство Bindings, которое представляет собой набор всех привязок для сайта. .

Вы должны использовать модуль WebAdministration, который поставляется вместе с IIS, вместо общих командлетов элементов. Он содержит различные полезные командлеты, в том числе Set-WebBinding и New-WebBinding. Например:

New-WebBinding -Name "TestMiddleTierSite" -IPAddress "*" -Port 81 -Protocol http

...