使用 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"}
我们使用 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"}