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

时间:2015-06-18 08:31:50

标签: powershell iis octopus-deploy

我们使用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])

覆盖所有现有的绑定,但我似乎无法找到解决方法。

2 个答案:

答案 0 :(得分:2)

您可以使用New-WebBinding cmdlet:

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

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

答案 1 :(得分:1)

你可以使用New-ItemProperty,因为jisaak说,这主要是针对http(s)。

如果您需要添加其他类型的绑定,则必须使用Set-ItemProperty,而不是New-ItemProperty -path "IIS:\Sites\YourSiteName" ` -name bindings -value @{protocol="net.pipe";bindingInformation="SiteName"}

<?php
$str = <<<EOT
// JSON here...
EOT;

$parsed_json = json_decode($str, true);
$parsed_json = $parsed_json['gigs'];

foreach($parsed_json as $key => $value)
{
   echo $value['title'] . '<br>';
}
?>