使用 PowerShell 添加到 IIS 的绑定而不覆盖现有的

Add Binding To IIS With PowerShell Without Overwriting Existing

我们使用 OctopusDeploy 创建网站,并使用社区步骤网站上的创建网站模板。我稍微修改了它以确保如果该网站存在,它会添加默认绑定,但它会删除所有现有绑定。有没有一种方法可以简单地向 IIS 添加一个绑定,如果它已经存在则覆盖(或忽略)并且不删除所有现有的绑定?

我们现有的脚本如下:

$bindingInformation = "${bindingIpAddress}:${bindingPort}:${bindingHost}"

$sitePath = ("IIS:\Sites\" + $webSiteName)

$site = Get-Item $sitePath -ErrorAction SilentlyContinue
if (!$site) { 
    Write-Output "Creating web site $webSiteName" 
    $id = (dir iis:\sites | foreach {$_.id} | sort -Descending | select -first 1) + 1
    new-item $sitePath -bindings ($wsBindings[0]) -id $id -physicalPath $webRoot -confirm:$false
} else {
    write-host "Web site $webSiteName already exists"
    Set-ItemProperty -Path $sitePath -Name Bindings -Value ($wsBindings[0])
}

好像是这一行:

        Set-ItemProperty -Path $sitePath -Name Bindings -Value ($wsBindings[0])

正在覆盖所有现有绑定,但我似乎找不到解决方法。

您可以使用 New-WebBinding cmdlet:

  New-WebBinding `
        -Name $webSiteName `
        -Protocol 'http' `
        -Port $bindingPort `
        -IPAddress $bindingIpAddress `
        -HostHeader $bindingHost

并使用 Get-WebBinding cmdlet 检查绑定是否已经存在。

你可以像jisaak说的那样使用New-WebBinding,主要用于http(s)。

如果您需要添加其他类型的绑定,您必须使用New-ItemProperty,而不是Set-ItemProperty

New-ItemProperty -path "IIS:\Sites\YourSiteName" `
    -name bindings -value @{protocol="net.pipe";bindingInformation="SiteName"}