IIS - Add HTTP(S) Bindings

Octopus.Script exported 2020-07-17 by hasherdk belongs to ‘IIS’ category.

Adds HTTP and HTTPS bindings to a website using the specified host name, port numbers, Certificate Location, and SSL Thumbprint

Parameters

When steps based on the template are included in a project’s deployment process, the parameters below can be set.

Website name

AD_AddBinding_WebsiteName =

The website name to apply the binding to

Host name

AD_AddBinding_HostName =

The host name

Http Port

AD_AddBinding_HttpPort = 80

Optional HTTP port number

HTTPS Port

AD_AddBinding_HttpsPort = 443

Optional HTTPS port number

SSL Thumbprint

AD_AddBinding_SSLThumbprint =

The SSL certificate thumbprint(no spaces)

Certificate Store Location

AD_AddBinding_SSLCertificateLocation = My

Optional Certificate Store location, Defaults to “My”

Nr of attempts

AD_AddBinding_Attempts = 5

Optional number of attempts before failing

Script body

Steps based on this template will execute the following PowerShell script.

# Running outside octopus
Param(
    [string] $AD_AddBinding_WebsiteName,
    [string] $AD_AddBinding_HostName,
    [UInt32] $AD_AddBinding_HttpPort = 80,
    [UInt32] $AD_AddBinding_HttpsPort = 443,
    [string] $AD_AddBinding_SSLThumbprint = $null,
    [string] $AD_AddBinding_SSLCertificateLocation = "My",
    [Int16] $AD_AddBinding_Attempts = 5,
    [switch] $WhatIf
)

$ErrorActionPreference = "Stop"

function Get-Param($Name, [switch]$Required, $Default) {
    $result = $null

    if ($null -ne $OctopusParameters) {
        $result = $OctopusParameters[$Name]
    }

    if ($null -eq $result) {
        $variable = Get-Variable $Name -EA SilentlyContinue
        if ($null -ne $variable) {
            $result = $variable.Value
        }
    }

    if ($null -eq $result) {
        if ($Required) {
            throw "Missing parameter value $Name"
        }
        else {
            $result = $Default
        }
    }

    return $result
}

function Execute(
    [Parameter(Mandatory = $true)][string] $WebsiteName,
    [Parameter(Mandatory = $true)][string] $HostName,
    [Parameter(Mandatory = $false)][uint32] $HttpPort = 80,
    [Parameter(Mandatory = $false)][uint32] $HttpsPort = 443,
    [Parameter(Mandatory = $false)][string] $SSLThumbprint = $null,
    [Parameter(Mandatory = $false)][string] $SSLCertificateLocation = "My",
    [Parameter(Mandatory = $false)][Int16] $Attempts = 5
) {
    Import-Module WebAdministration

    $attemptCount = 0
    $operationIncomplete = $true
    $maxFailures = $Attempts
    $sleepBetweenFailures = 1

    $appId = '{00112233-4455-6677-8899-AABBCCDDEEFF}'

    while ($operationIncomplete -and $attemptCount -lt $maxFailures) {
        $attemptCount = ($attemptCount + 1)
        if ($attemptCount -ge 2) {
            Write-Output "Waiting for $sleepBetweenFailures seconds before retrying..."
            Start-Sleep -s $sleepBetweenFailures
            Write-Output "Retrying..."
            $sleepBetweenFailures = ($sleepBetweenFailures * 2)
        }
        try {
            $protocol = "http"
            $otherProtocol = "https"

            $existingBinding = Get-WebBinding -Name $WebsiteName -Port $HttpPort -HostHeader $HostName
            $msg = "Binding '{0} *:{1}:{2} sslFlags=0' on '{3}'" -f $protocol, $HttpPort, $HostName, $WebsiteName
            if ($null -eq $existingBinding) {
                Write-Output "$msg doesn't exist - ADDING..."
                if (-Not ($WhatIf)) {
                    New-WebBinding -Name $WebsiteName -Protocol $protocol -Port $HttpPort -HostHeader $HostName -SslFlags 0
                }
                Write-Output "$msg - ADDED"
            }
            elseif ($existingBinding.protocol -contains $protocol) {
                Write-Output "$msg  already exists - SKIPING"
            }
            else {
                Write-Error "$msg can't be added because it already exists on $otherProtocol"
            }
            Write-Output "SSL is : $SSLThumbprint"
            if (-Not ([string]::IsNullOrWhitespace($SSLThumbprint))) {
                $protocol = "https"
                $otherProtocol = "http"
                $existingBinding = Get-WebBinding -Name $WebsiteName -Port $HttpsPort -HostHeader $HostName
                $msg = "Binding '{0} *:{1}:{2} sslFlags=1' on '{3}'" -f $protocol, $HttpsPort, $HostName, $WebsiteName
                if ($null -eq $existingBinding) {
                    Write-Output "$msg doesn't exist - ADDING..."
                    if (-Not ($WhatIf)) {
                        New-WebBinding -Name $WebsiteName -Protocol $protocol -Port $HttpsPort -HostHeader $HostName -SslFlags 1
                        netsh http add sslcert hostnameport=$($HostName):$HttpsPort certhash=$SSLThumbprint appid=$appId certstorename=$SSLCertificateLocation
                    }
                    Write-Output "$msg - ADDED"
                }
                elseif ($existingBinding.protocol -contains $protocol) {
                    Write-Output "$msg  already exists - SKIPING"
                }
                else {
                    Write-Error "$msg can't be added because it already exists on $otherProtocol"
                }
            }
            $operationIncomplete = $false
        }
        catch [System.Exception] {
            if ($attemptCount -lt ($maxFailures)) {
                Write-Host ("Attempt $attemptCount of $maxFailures failed: " + $_.Exception.Message)
            }
            else {
                throw
            }
        }
    }
}
& Execute `
(Get-Param 'AD_AddBinding_WebsiteName' -Required)`
(Get-Param 'AD_AddBinding_HostName' -Required)`
(Get-Param 'AD_AddBinding_HttpPort')`
(Get-Param 'AD_AddBinding_HttpsPort')`
(Get-Param 'AD_AddBinding_SSLThumbprint')`
(Get-Param 'AD_AddBinding_SSLCertificateLocation')`
(Get-Param 'AD_AddBinding_Attempts')

Provided under the Apache License version 2.0.

Report an issue

To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.

{
  "Id": "0ad0ad00-adad-adad-adad-000000000003",
  "Name": "IIS - Add HTTP(S) Bindings",
  "Description": "Adds HTTP and HTTPS bindings to a website using the specified host name, port numbers, Certificate Location, and SSL Thumbprint",
  "Version": 3,
  "ExportedAt": "2020-07-17T05:49:27.280Z",
  "ActionType": "Octopus.Script",
  "Author": "hasherdk",
  "Parameters": [
    {
      "Name": "AD_AddBinding_WebsiteName",
      "Label": "Website name",
      "HelpText": "The website name to apply the binding to",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "AD_AddBinding_HostName",
      "Label": "Host name",
      "HelpText": "The host name",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "AD_AddBinding_HttpPort",
      "Label": "Http Port",
      "HelpText": "Optional HTTP port number",
      "DefaultValue": "80",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "AD_AddBinding_HttpsPort",
      "Label": "HTTPS Port",
      "HelpText": "Optional HTTPS port number",
      "DefaultValue": "443",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "AD_AddBinding_SSLThumbprint",
      "Label": "SSL Thumbprint",
      "HelpText": "The SSL certificate thumbprint(no spaces)",
      "DefaultValue": "",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "AD_AddBinding_SSLCertificateLocation",
      "Label": "Certificate Store Location",
      "HelpText": "Optional Certificate Store location, Defaults to \"My\"",
      "DefaultValue": "My",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    },
    {
      "Name": "AD_AddBinding_Attempts",
      "Label": "Nr of attempts",
      "HelpText": "Optional number of attempts before failing",
      "DefaultValue": "5",
      "DisplaySettings": {
        "Octopus.ControlType": "SingleLineText"
      }
    }
  ],
  "Properties": {
    "Octopus.Action.Script.ScriptSource": "Inline",
    "Octopus.Action.Script.Syntax": "PowerShell",
    "Octopus.Action.Script.ScriptBody": "# Running outside octopus\nParam(\n    [string] $AD_AddBinding_WebsiteName,\n    [string] $AD_AddBinding_HostName,\n    [UInt32] $AD_AddBinding_HttpPort = 80,\n    [UInt32] $AD_AddBinding_HttpsPort = 443,\n    [string] $AD_AddBinding_SSLThumbprint = $null,\n    [string] $AD_AddBinding_SSLCertificateLocation = \"My\",\n    [Int16] $AD_AddBinding_Attempts = 5,\n    [switch] $WhatIf\n)\n\n$ErrorActionPreference = \"Stop\"\n\nfunction Get-Param($Name, [switch]$Required, $Default) {\n    $result = $null\n\n    if ($null -ne $OctopusParameters) {\n        $result = $OctopusParameters[$Name]\n    }\n\n    if ($null -eq $result) {\n        $variable = Get-Variable $Name -EA SilentlyContinue\n        if ($null -ne $variable) {\n            $result = $variable.Value\n        }\n    }\n\n    if ($null -eq $result) {\n        if ($Required) {\n            throw \"Missing parameter value $Name\"\n        }\n        else {\n            $result = $Default\n        }\n    }\n\n    return $result\n}\n\nfunction Execute(\n    [Parameter(Mandatory = $true)][string] $WebsiteName,\n    [Parameter(Mandatory = $true)][string] $HostName,\n    [Parameter(Mandatory = $false)][uint32] $HttpPort = 80,\n    [Parameter(Mandatory = $false)][uint32] $HttpsPort = 443,\n    [Parameter(Mandatory = $false)][string] $SSLThumbprint = $null,\n    [Parameter(Mandatory = $false)][string] $SSLCertificateLocation = \"My\",\n    [Parameter(Mandatory = $false)][Int16] $Attempts = 5\n) {\n    Import-Module WebAdministration\n\n    $attemptCount = 0\n    $operationIncomplete = $true\n    $maxFailures = $Attempts\n    $sleepBetweenFailures = 1\n\n    $appId = '{00112233-4455-6677-8899-AABBCCDDEEFF}'\n\n    while ($operationIncomplete -and $attemptCount -lt $maxFailures) {\n        $attemptCount = ($attemptCount + 1)\n        if ($attemptCount -ge 2) {\n            Write-Output \"Waiting for $sleepBetweenFailures seconds before retrying...\"\n            Start-Sleep -s $sleepBetweenFailures\n            Write-Output \"Retrying...\"\n            $sleepBetweenFailures = ($sleepBetweenFailures * 2)\n        }\n        try {\n            $protocol = \"http\"\n            $otherProtocol = \"https\"\n\n            $existingBinding = Get-WebBinding -Name $WebsiteName -Port $HttpPort -HostHeader $HostName\n            $msg = \"Binding '{0} *:{1}:{2} sslFlags=0' on '{3}'\" -f $protocol, $HttpPort, $HostName, $WebsiteName\n            if ($null -eq $existingBinding) {\n                Write-Output \"$msg doesn't exist - ADDING...\"\n                if (-Not ($WhatIf)) {\n                    New-WebBinding -Name $WebsiteName -Protocol $protocol -Port $HttpPort -HostHeader $HostName -SslFlags 0\n                }\n                Write-Output \"$msg - ADDED\"\n            }\n            elseif ($existingBinding.protocol -contains $protocol) {\n                Write-Output \"$msg  already exists - SKIPING\"\n            }\n            else {\n                Write-Error \"$msg can't be added because it already exists on $otherProtocol\"\n            }\n            Write-Output \"SSL is : $SSLThumbprint\"\n            if (-Not ([string]::IsNullOrWhitespace($SSLThumbprint))) {\n                $protocol = \"https\"\n                $otherProtocol = \"http\"\n                $existingBinding = Get-WebBinding -Name $WebsiteName -Port $HttpsPort -HostHeader $HostName\n                $msg = \"Binding '{0} *:{1}:{2} sslFlags=1' on '{3}'\" -f $protocol, $HttpsPort, $HostName, $WebsiteName\n                if ($null -eq $existingBinding) {\n                    Write-Output \"$msg doesn't exist - ADDING...\"\n                    if (-Not ($WhatIf)) {\n                        New-WebBinding -Name $WebsiteName -Protocol $protocol -Port $HttpsPort -HostHeader $HostName -SslFlags 1\n                        netsh http add sslcert hostnameport=$($HostName):$HttpsPort certhash=$SSLThumbprint appid=$appId certstorename=$SSLCertificateLocation\n                    }\n                    Write-Output \"$msg - ADDED\"\n                }\n                elseif ($existingBinding.protocol -contains $protocol) {\n                    Write-Output \"$msg  already exists - SKIPING\"\n                }\n                else {\n                    Write-Error \"$msg can't be added because it already exists on $otherProtocol\"\n                }\n            }\n            $operationIncomplete = $false\n        }\n        catch [System.Exception] {\n            if ($attemptCount -lt ($maxFailures)) {\n                Write-Host (\"Attempt $attemptCount of $maxFailures failed: \" + $_.Exception.Message)\n            }\n            else {\n                throw\n            }\n        }\n    }\n}\n& Execute `\n(Get-Param 'AD_AddBinding_WebsiteName' -Required)`\n(Get-Param 'AD_AddBinding_HostName' -Required)`\n(Get-Param 'AD_AddBinding_HttpPort')`\n(Get-Param 'AD_AddBinding_HttpsPort')`\n(Get-Param 'AD_AddBinding_SSLThumbprint')`\n(Get-Param 'AD_AddBinding_SSLCertificateLocation')`\n(Get-Param 'AD_AddBinding_Attempts')\n"
  },
  "Category": "IIS",
  "HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/iis-website-add-http-s-bindings.json",
  "Website": "/step-templates/0ad0ad00-adad-adad-adad-000000000003",
  "Logo": "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",
  "$Meta": {
    "Type": "ActionTemplate"
  }
}

History

Page updated on Friday, July 17, 2020