Octopus.Script exported 2018-09-18 by droorda belongs to ‘IIS’ category.
Creates or Reconfigures an IIS Application Pool
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
Application pool name
AppPoolName =
The name of the application pool that the application will run under.
Identity Type
AppPoolIdentityType = 3
The type of identity that the application pool will be using.
Specific User Name
AppPoolIdentityUser =
(Specific User) The user name to use with the application pool identity.
Specific User Password
AppPoolIdentityPassword =
(Specific User) The password for the specific user to use with the application pool identity.
Load User Profile
AppPoolLoadUserProfile = True
This setting specifies whether IIS loads the user profile for an application pool identity.
Enable 32-Bit Applications
AppPoolEnable32BitAppOnWin64 = True
Allows the application pool to run 32-bit applications when running on 64-bit windows.
Start Automatically
AppPoolAutoStart = True
Automatically start the application pool when the application pool is created or whenever IIS is started.
Managed Runtime Version
AppPoolManagedRuntimeVersion = v4.0
Specifies the CLR version to be used by the application pool.
Managed Pipeline Mode
AppPoolManagedPipelineMode = 0
Specifies the request-processing mode that is used to process requests for managed content.
Process Idle Timeout
AppPoolIdleTimeoutMinutes = 20
Amount of time (in minutes) a worker process will remain idle before it shuts down. A value of 0 means the process does not shut down after an idle timeout.
Maximum Worker Processes
AppPoolMaxProcesses = 1
Maximum number of worker processes permitted to service requests for the application pool.
Regular Time Interval
AppPoolRegularTimeInterval = 1740
Period of time (in minutes) after which an application pool will recycle. A value of 0 means the application pool does not recycle on a regular interval.
Application pool periodic recycle time
AppPoolPeriodicRecycleTime = 03:00:00
A specific local time, in minutes after midnight, when the application pool is recycled. Separate multiple times by using a ,\n\nExample: “00:30:00” for half an hour past midnight. or “06:00:00” for midnight and 6 am.
Queue Length
AppPoolQueueLength = 1000
Maximum number of requests that HTTP.sys will queue for the application pool. When the queue is full, new requests receive a 504 “Service Unavailable” response.
Start Mode
AppPoolStartMode = OnDemand
Specifies whether the application pool should run in On Demand Mode or Always Running Mode.
CPU Limit (percent)
AppPoolCpuLimit = 0
Configures the maximum percentage of CPU time (in percent) that the worker processes in an application pool are allowed to consume over a period of time as indicated by the resetInterval attribute. If the limit set by the limit attribute is exceeded, an event is written to the event log and an optional set of events can be triggered. These optional events are determined by the action attribute.
The default value is 0, which disables CPU limiting.
CPU Limit Action
AppPoolCpuLimitAction = 0
Configures the action that IIS takes when a worker process exceeds its configured CPU limit. The action attribute is configured on a per-application pool basis.
The action attribute can be one of the following possible values. The default value is NoAction.
Script body
Steps based on this template will execute the following PowerShell script.
function Validate-Parameter {
Param(
[Parameter(Position=0)][string]$Parameter,
[Parameter(Mandatory=$true, Position=1)][string]$ParameterName
)
if (!$ParameterName -contains 'Password') {
Write-Host ('{0}: {1}' -f ${ParameterName},$Parameter)
}
if (!$Parameter) {
Write-Error ('No value was set for {0}, and it cannot be empty' -f $ParameterName)
}
}
function Execute-Retry {
Param(
[Parameter(Mandatory=$true, Position=0)][ScriptBlock]$Command
)
$attemptCount = 0
$operationIncomplete = $true
$maxFailures = 5
$sleepBetweenFailures = Get-Random -minimum 1 -maximum 4
while ($operationIncomplete -and $attemptCount -lt $maxFailures) {
$attemptCount = ($attemptCount + 1)
if ($attemptCount -ge 2) {
Write-Output ('Waiting for {0} seconds before retrying ...' -f $sleepBetweenFailures)
Start-Sleep -s $sleepBetweenFailures
Write-Output 'Retrying ...'
}
try {
& $Command
$operationIncomplete = $false
} catch [System.Exception] {
if ($attemptCount -lt ($maxFailures)) {
Write-Output ('Attempt {0} of {1} failed: {2}' -f $attemptCount,$maxFailures,$_.Exception.Message)
}
else {
Write-Host 'Failed to execute command'
}
}
}
}
function Get-ScheduledTimes {
Param(
[Parameter(Position=0)][string]$Schedule
)
if (!$Schedule) {
return @()
}
$minutes = $Schedule.Split(',')
$minuteArrayList = New-Object System.Collections.ArrayList(,$minutes)
return $minuteArrayList
}
[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.Web.Administration')
Add-PSSnapin WebAdministration -ErrorAction SilentlyContinue
Import-Module WebAdministration -ErrorAction SilentlyContinue
$appPoolName = $OctopusParameters['AppPoolName']
$appPoolIdentityType = $OctopusParameters['AppPoolIdentityType']
if ($appPoolIdentityType -eq 3) {
$appPoolIdentityUser = $OctopusParameters['AppPoolIdentityUser']
$appPoolIdentityPassword = $OctopusParameters['AppPoolIdentityPassword']
}
$appPoolLoadUserProfile = [boolean]::Parse($OctopusParameters['AppPoolLoadUserProfile'])
$appPoolAutoStart = [boolean]::Parse($OctopusParameters['AppPoolAutoStart'])
$appPoolEnable32BitAppOnWin64 = [boolean]::Parse($OctopusParameters['AppPoolEnable32BitAppOnWin64'])
$appPoolManagedRuntimeVersion = $OctopusParameters['AppPoolManagedRuntimeVersion']
$appPoolManagedPipelineMode = $OctopusParameters['AppPoolManagedPipelineMode']
$appPoolIdleTimeout = [TimeSpan]::FromMinutes($OctopusParameters['AppPoolIdleTimeoutMinutes'])
$appPoolPeriodicRecycleTime = $OctopusParameters['AppPoolPeriodicRecycleTime']
$appPoolMaxProcesses = [int]$OctopusParameters['AppPoolMaxProcesses']
$appPoolRegularTimeInterval = [TimeSpan]::FromMinutes($OctopusParameters['AppPoolRegularTimeInterval'])
$appPoolQueueLength = [int]$OctopusParameters['AppPoolQueueLength']
$appPoolStartMode = $OctopusParameters['AppPoolStartMode']
$appPoolCpuAction = $OctopusParameters['AppPoolCpuLimitAction']
$appPoolCpuLimit = [int]$OctopusParameters['AppPoolCpuLimit']
Validate-Parameter -Parameter $appPoolName -ParameterName 'Application Pool Name'
Validate-Parameter -Parameter $appPoolIdentityType -ParameterName 'Identity Type'
if ($appPoolIdentityType -eq 3) {
Validate-Parameter -Parameter $appPoolIdentityUser -ParameterName 'Identity UserName'
# If using Group Managed Serice Accounts, the password should be allowed to be empty
}
Validate-Parameter -Parameter $appPoolLoadUserProfile -parameterName 'Load User Profile'
Validate-Parameter -Parameter $appPoolAutoStart -ParameterName 'AutoStart'
Validate-Parameter -Parameter $appPoolEnable32BitAppOnWin64 -ParameterName 'Enable 32-Bit Apps on 64-bit Windows'
Validate-Parameter -Parameter $appPoolManagedRuntimeVersion -ParameterName 'Managed Runtime Version'
Validate-Parameter -Parameter $appPoolManagedPipelineMode -ParameterName 'Managed Pipeline Mode'
Validate-Parameter -Parameter $appPoolIdleTimeout -ParameterName 'Process Idle Timeout'
Validate-Parameter -Parameter $appPoolMaxProcesses -ParameterName 'Maximum Worker Processes'
Validate-Parameter -Parameter $appPoolStartMode -parameterName 'Start Mode'
Validate-Parameter -Parameter $appPoolCpuAction -parameterName 'CPU Limit Action'
Validate-Parameter -Parameter $appPoolCpuLimit -parameterName 'CPU Limit (percent)'
$iis = (New-Object Microsoft.Web.Administration.ServerManager)
$pool = $iis.ApplicationPools | Where-Object {$_.Name -eq $appPoolName} | Select-Object -First 1
if ($pool -eq $null) {
Write-Output ('Creating Application Pool {0}' -f $appPoolName)
Execute-Retry {
$iis = (New-Object Microsoft.Web.Administration.ServerManager)
$iis.ApplicationPools.Add($appPoolName)
$iis.CommitChanges()
}
}
else {
Write-Output ('Application Pool {0} already exists, reconfiguring ...' -f $appPoolName)
}
$list = Get-ScheduledTimes -Schedule $appPoolPeriodicRecycleTime
Execute-Retry {
$iis = (New-Object Microsoft.Web.Administration.ServerManager)
$pool = $iis.ApplicationPools | Where-Object {$_.Name -eq $appPoolName} | Select-Object -First 1
Write-Output ('Setting: AutoStart = {0}' -f $appPoolAutoStart)
$pool.AutoStart = $appPoolAutoStart
Write-Output ('Setting: Enable32BitAppOnWin64 = {0}' -f $appPoolEnable32BitAppOnWin64)
$pool.Enable32BitAppOnWin64 = $appPoolEnable32BitAppOnWin64
Write-Output ('Setting: IdentityType = {0}' -f $appPoolIdentityType)
$pool.ProcessModel.IdentityType = $appPoolIdentityType
if ($appPoolIdentityType -eq 3) {
Write-Output ('Setting: UserName = {0}' -f $appPoolIdentityUser)
$pool.ProcessModel.UserName = $appPoolIdentityUser
if (!$appPoolIdentityPassword) {
Write-Output ('Setting: Password = [empty]')
}
else {
Write-Output ('Setting: Password = [Omitted For Security]')
}
$pool.ProcessModel.Password = $appPoolIdentityPassword
}
Write-Output ('Setting: LoadUserProfile = {0}' -f $appPoolLoadUserProfile)
$pool.ProcessModel.LoadUserProfile = $appPoolLoadUserProfile
Write-Output ('Setting: ManagedRuntimeVersion = {0}' -f $appPoolManagedRuntimeVersion)
if ($appPoolManagedRuntimeVersion -eq 'No Managed Code') {
$pool.ManagedRuntimeVersion = ''
}
else {
$pool.ManagedRuntimeVersion = $appPoolManagedRuntimeVersion
}
Write-Output ('Setting: ManagedPipelineMode = {0}' -f $appPoolManagedPipelineMode)
$pool.ManagedPipelineMode = $appPoolManagedPipelineMode
Write-Output ('Setting: IdleTimeout = {0}' -f $appPoolIdleTimeout)
$pool.ProcessModel.IdleTimeout = $appPoolIdleTimeout
Write-Output ('Setting: MaxProcesses = {0}' -f $appPoolMaxProcesses)
$pool.ProcessModel.MaxProcesses = $appPoolMaxProcesses
Write-Output ('Setting: RegularTimeInterval = {0}' -f $appPoolRegularTimeInterval)
$pool.Recycling.PeriodicRestart.Time = $appPoolRegularTimeInterval
Write-Output ('Setting: QueueLength = {0}' -f $appPoolQueueLength)
$pool.QueueLength = $appPoolQueueLength
Write-Output ('Setting: CPU Limit (percent) = {0}' -f $appPoolCpuLimit)
## Limit is stored in 1/1000s of one percent
$pool.Cpu.Limit = $appPoolCpuLimit * 1000
Write-Output ('Setting: CPU Limit Action = {0}' -f $appPoolCpuAction)
$pool.Cpu.Action = $appPoolCpuAction
Write-Output ('Setting: Schedule = {0}' -f $appPoolPeriodicRecycleTime)
$pool.Recycling.PeriodicRestart.Schedule.Clear()
foreach($timestamp in $list) {
$pool.Recycling.PeriodicRestart.Schedule.Add($timestamp)
}
if (Get-Member -InputObject $pool -Name StartMode -MemberType Properties)
{
Write-Output ('Setting: StartMode = {0}' -f $appPoolStartMode)
$pool.StartMode = $appPoolStartMode
}
else
{
Write-Output ('IIS does not support StartMode property, skipping this property...')
}
$iis.CommitChanges()
}
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "70a293d6-ee6a-4755-8e06-5f13d7e51fff",
"Name": "IIS AppPool - Create",
"Description": "Creates or Reconfigures an IIS Application Pool",
"Version": 14,
"ExportedAt": "2018-09-18T04:42:42.009Z",
"ActionType": "Octopus.Script",
"Author": "droorda",
"Parameters": [
{
"Id": "bd870787-9020-49e8-8add-ad9f5fb65125",
"Name": "AppPoolName",
"Label": "Application pool name",
"HelpText": "The name of the application pool that the application will run under.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
},
"Links": {}
},
{
"Id": "7d8d63e7-5f6e-4a21-a58f-0f0787e1654f",
"Name": "AppPoolIdentityType",
"Label": "Identity Type",
"HelpText": "The type of identity that the application pool will be using.",
"DefaultValue": "3",
"DisplaySettings": {
"Octopus.ControlType": "Select",
"Octopus.SelectOptions": "0|Local System\n1|Local Service\n2|Network Service\n3|Specific User...\n4|Application Pool Identity"
},
"Links": {}
},
{
"Id": "4aabb8a8-df82-4462-be11-5f225466fa22",
"Name": "AppPoolIdentityUser",
"Label": "Specific User Name",
"HelpText": "_(Specific User)_ The user name to use with the application pool identity.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
},
"Links": {}
},
{
"Id": "701c812c-902c-4e2f-a888-cbf5d2fbf83d",
"Name": "AppPoolIdentityPassword",
"Label": "Specific User Password",
"HelpText": "_(Specific User)_ The password for the specific user to use with the application pool identity.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "Sensitive"
},
"Links": {}
},
{
"Id": "63663052-6e0d-4ba8-ba95-f4213ba8aed2",
"Name": "AppPoolLoadUserProfile",
"Label": "Load User Profile",
"HelpText": "This setting specifies whether IIS loads the user profile for an application pool identity.",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
},
"Links": {}
},
{
"Id": "c5c7d104-2d65-46da-a93f-bc3aea5ba1ab",
"Name": "AppPoolEnable32BitAppOnWin64",
"Label": "Enable 32-Bit Applications",
"HelpText": "Allows the application pool to run 32-bit applications when running on 64-bit windows.",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
},
"Links": {}
},
{
"Id": "0af4b8ba-587f-4e92-a344-44a3408bad96",
"Name": "AppPoolAutoStart",
"Label": "Start Automatically",
"HelpText": "Automatically start the application pool when the application pool is created or whenever IIS is started.",
"DefaultValue": "True",
"DisplaySettings": {
"Octopus.ControlType": "Checkbox"
},
"Links": {}
},
{
"Id": "8eaf280a-7e17-4f03-90a1-29f66ca87b1a",
"Name": "AppPoolManagedRuntimeVersion",
"Label": "Managed Runtime Version",
"HelpText": "Specifies the CLR version to be used by the application pool.",
"DefaultValue": "v4.0",
"DisplaySettings": {
"Octopus.ControlType": "Select",
"Octopus.SelectOptions": "v1.1|CLR v1.1 (.NET 1.0, 1.1)\nv2.0|CLR v2.0 (.NET 2.0, 3.0, 3.5)\nv4.0|CLR v4.0 (.NET 4.0, 4.5, 4.6)\nNo Managed Code|No Managed Code (ASP.NET Core)"
},
"Links": {}
},
{
"Id": "bae7e84e-b17c-49bb-aba1-44d8f0326881",
"Name": "AppPoolManagedPipelineMode",
"Label": "Managed Pipeline Mode",
"HelpText": "Specifies the request-processing mode that is used to process requests for managed content.",
"DefaultValue": "0",
"DisplaySettings": {
"Octopus.ControlType": "Select",
"Octopus.SelectOptions": "0|Integrated\n1|Classic"
},
"Links": {}
},
{
"Id": "cf5acda5-5261-40b9-ae6c-4067b35b9857",
"Name": "AppPoolIdleTimeoutMinutes",
"Label": "Process Idle Timeout",
"HelpText": "Amount of time (in minutes) a worker process will remain idle before it shuts down. A value of 0 means the process does not shut down after an idle timeout.",
"DefaultValue": "20",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
},
"Links": {}
},
{
"Id": "67c8fc44-00c6-4f0e-9b54-48acfe5792f9",
"Name": "AppPoolMaxProcesses",
"Label": "Maximum Worker Processes",
"HelpText": "Maximum number of worker processes permitted to service requests for the application pool.",
"DefaultValue": "1",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
},
"Links": {}
},
{
"Id": "63bc9198-49b3-451d-b082-9faf38f759e2",
"Name": "AppPoolRegularTimeInterval",
"Label": "Regular Time Interval",
"HelpText": "Period of time (in minutes) after which an application pool will recycle. A value of 0 means the application pool does not recycle on a regular interval.",
"DefaultValue": "1740",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
},
"Links": {}
},
{
"Id": "3b5cadcd-3092-4eb7-aeb6-2b7896a22e10",
"Name": "AppPoolPeriodicRecycleTime",
"Label": "Application pool periodic recycle time",
"HelpText": "A specific local time, in minutes after midnight, when the application pool is recycled. Separate multiple times by using a ,\\n\\nExample: \\\"00:30:00\\\" for half an hour past midnight. or \\\"06:00:00\\\" for midnight and 6 am.",
"DefaultValue": "03:00:00",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
},
"Links": {}
},
{
"Id": "cf466a9a-40a1-4fe9-ab2d-f99eb92d1593",
"Name": "AppPoolQueueLength",
"Label": "Queue Length",
"HelpText": "Maximum number of requests that HTTP.sys will queue for the application pool. When the queue is full, new requests receive a 504 \"Service Unavailable\" response.",
"DefaultValue": "1000",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
},
"Links": {}
},
{
"Id": "cbf99ca9-7282-4bb2-99b8-82c1355c4bc0",
"Name": "AppPoolStartMode",
"Label": "Start Mode",
"HelpText": "Specifies whether the application pool should run in On Demand Mode or Always Running Mode.",
"DefaultValue": "OnDemand",
"DisplaySettings": {
"Octopus.ControlType": "Select",
"Octopus.SelectOptions": "OnDemand|On Demand\nAlwaysRunning|Always Running"
},
"Links": {}
},
{
"Id": "7ef971c4-6493-481f-9711-91cf902a2bca",
"Name": "AppPoolCpuLimit",
"Label": "CPU Limit (percent)",
"HelpText": "Configures the maximum percentage of CPU time (in percent) that the worker processes in an application pool are allowed to consume over a period of time as indicated by the resetInterval attribute. If the limit set by the limit attribute is exceeded, an event is written to the event log and an optional set of events can be triggered. These optional events are determined by the action attribute.\n\nThe default value is 0, which disables CPU limiting.",
"DefaultValue": "0",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
},
"Links": {}
},
{
"Id": "b5b33393-cd44-4af4-b1e2-0a090f42576e",
"Name": "AppPoolCpuLimitAction",
"Label": "CPU Limit Action",
"HelpText": "Configures the action that IIS takes when a worker process exceeds its configured CPU limit. The action attribute is configured on a per-application pool basis.\n\nThe action attribute can be one of the following possible values. The default value is NoAction.",
"DefaultValue": "0",
"DisplaySettings": {
"Octopus.ControlType": "Select",
"Octopus.SelectOptions": "0|NoAction\n1|KillW3wp\n2|Throttle\n3|ThrottleUnderLoad"
},
"Links": {}
}
],
"Properties": {
"Octopus.Action.Script.ScriptBody": "function Validate-Parameter {\n Param(\n [Parameter(Position=0)][string]$Parameter,\n [Parameter(Mandatory=$true, Position=1)][string]$ParameterName\n )\n if (!$ParameterName -contains 'Password') {\n Write-Host ('{0}: {1}' -f ${ParameterName},$Parameter)\n }\n if (!$Parameter) {\n Write-Error ('No value was set for {0}, and it cannot be empty' -f $ParameterName)\n }\n}\n\nfunction Execute-Retry {\n Param(\n [Parameter(Mandatory=$true, Position=0)][ScriptBlock]$Command\n )\n\t$attemptCount = 0\n\t$operationIncomplete = $true\n $maxFailures = 5\n $sleepBetweenFailures = Get-Random -minimum 1 -maximum 4\n\twhile ($operationIncomplete -and $attemptCount -lt $maxFailures) {\n\t\t$attemptCount = ($attemptCount + 1)\n\t\tif ($attemptCount -ge 2) {\n\t\t\tWrite-Output ('Waiting for {0} seconds before retrying ...' -f $sleepBetweenFailures)\n\t\t\tStart-Sleep -s $sleepBetweenFailures\n\t\t\tWrite-Output 'Retrying ...'\n\t\t}\n\t\ttry {\n\t\t\t& $Command\n\t\t\t$operationIncomplete = $false\n\t\t} catch [System.Exception] {\n\t\t\tif ($attemptCount -lt ($maxFailures)) {\n\t\t\t\tWrite-Output ('Attempt {0} of {1} failed: {2}' -f $attemptCount,$maxFailures,$_.Exception.Message)\n\t\t\t}\n\t\t\telse {\n Write-Host 'Failed to execute command'\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction Get-ScheduledTimes {\n Param(\n [Parameter(Position=0)][string]$Schedule\n )\n if (!$Schedule) {\n return @()\n }\n $minutes = $Schedule.Split(',')\n $minuteArrayList = New-Object System.Collections.ArrayList(,$minutes)\n return $minuteArrayList\n}\n\n[System.Reflection.Assembly]::LoadWithPartialName('Microsoft.Web.Administration')\nAdd-PSSnapin WebAdministration -ErrorAction SilentlyContinue\nImport-Module WebAdministration -ErrorAction SilentlyContinue\n\n$appPoolName = $OctopusParameters['AppPoolName']\n$appPoolIdentityType = $OctopusParameters['AppPoolIdentityType']\nif ($appPoolIdentityType -eq 3) {\n $appPoolIdentityUser = $OctopusParameters['AppPoolIdentityUser']\n $appPoolIdentityPassword = $OctopusParameters['AppPoolIdentityPassword']\n}\n$appPoolLoadUserProfile = [boolean]::Parse($OctopusParameters['AppPoolLoadUserProfile'])\n$appPoolAutoStart = [boolean]::Parse($OctopusParameters['AppPoolAutoStart'])\n$appPoolEnable32BitAppOnWin64 = [boolean]::Parse($OctopusParameters['AppPoolEnable32BitAppOnWin64'])\n$appPoolManagedRuntimeVersion = $OctopusParameters['AppPoolManagedRuntimeVersion']\n$appPoolManagedPipelineMode = $OctopusParameters['AppPoolManagedPipelineMode']\n$appPoolIdleTimeout = [TimeSpan]::FromMinutes($OctopusParameters['AppPoolIdleTimeoutMinutes'])\n$appPoolPeriodicRecycleTime = $OctopusParameters['AppPoolPeriodicRecycleTime']\n$appPoolMaxProcesses = [int]$OctopusParameters['AppPoolMaxProcesses']\n$appPoolRegularTimeInterval = [TimeSpan]::FromMinutes($OctopusParameters['AppPoolRegularTimeInterval'])\n$appPoolQueueLength = [int]$OctopusParameters['AppPoolQueueLength']\n$appPoolStartMode = $OctopusParameters['AppPoolStartMode']\n$appPoolCpuAction = $OctopusParameters['AppPoolCpuLimitAction']\n$appPoolCpuLimit = [int]$OctopusParameters['AppPoolCpuLimit']\n\nValidate-Parameter -Parameter $appPoolName -ParameterName 'Application Pool Name'\nValidate-Parameter -Parameter $appPoolIdentityType -ParameterName 'Identity Type'\nif ($appPoolIdentityType -eq 3) {\n Validate-Parameter -Parameter $appPoolIdentityUser -ParameterName 'Identity UserName'\n # If using Group Managed Serice Accounts, the password should be allowed to be empty\n}\nValidate-Parameter -Parameter $appPoolLoadUserProfile -parameterName 'Load User Profile'\nValidate-Parameter -Parameter $appPoolAutoStart -ParameterName 'AutoStart'\nValidate-Parameter -Parameter $appPoolEnable32BitAppOnWin64 -ParameterName 'Enable 32-Bit Apps on 64-bit Windows'\nValidate-Parameter -Parameter $appPoolManagedRuntimeVersion -ParameterName 'Managed Runtime Version'\nValidate-Parameter -Parameter $appPoolManagedPipelineMode -ParameterName 'Managed Pipeline Mode'\nValidate-Parameter -Parameter $appPoolIdleTimeout -ParameterName 'Process Idle Timeout'\nValidate-Parameter -Parameter $appPoolMaxProcesses -ParameterName 'Maximum Worker Processes'\nValidate-Parameter -Parameter $appPoolStartMode -parameterName 'Start Mode'\nValidate-Parameter -Parameter $appPoolCpuAction -parameterName 'CPU Limit Action'\nValidate-Parameter -Parameter $appPoolCpuLimit -parameterName 'CPU Limit (percent)'\n\n$iis = (New-Object Microsoft.Web.Administration.ServerManager)\n$pool = $iis.ApplicationPools | Where-Object {$_.Name -eq $appPoolName} | Select-Object -First 1\nif ($pool -eq $null) {\n Write-Output ('Creating Application Pool {0}' -f $appPoolName)\n Execute-Retry {\n $iis = (New-Object Microsoft.Web.Administration.ServerManager)\n $iis.ApplicationPools.Add($appPoolName)\n $iis.CommitChanges()\n }\n}\nelse {\n Write-Output ('Application Pool {0} already exists, reconfiguring ...' -f $appPoolName)\n}\n$list = Get-ScheduledTimes -Schedule $appPoolPeriodicRecycleTime\nExecute-Retry {\n $iis = (New-Object Microsoft.Web.Administration.ServerManager)\n $pool = $iis.ApplicationPools | Where-Object {$_.Name -eq $appPoolName} | Select-Object -First 1\n Write-Output ('Setting: AutoStart = {0}' -f $appPoolAutoStart)\n $pool.AutoStart = $appPoolAutoStart\n Write-Output ('Setting: Enable32BitAppOnWin64 = {0}' -f $appPoolEnable32BitAppOnWin64)\n $pool.Enable32BitAppOnWin64 = $appPoolEnable32BitAppOnWin64\n Write-Output ('Setting: IdentityType = {0}' -f $appPoolIdentityType)\n $pool.ProcessModel.IdentityType = $appPoolIdentityType\n if ($appPoolIdentityType -eq 3) {\n Write-Output ('Setting: UserName = {0}' -f $appPoolIdentityUser)\n $pool.ProcessModel.UserName = $appPoolIdentityUser\n if (!$appPoolIdentityPassword) {\n Write-Output ('Setting: Password = [empty]')\n }\n else {\n Write-Output ('Setting: Password = [Omitted For Security]')\n }\n $pool.ProcessModel.Password = $appPoolIdentityPassword\n }\n\tWrite-Output ('Setting: LoadUserProfile = {0}' -f $appPoolLoadUserProfile)\n $pool.ProcessModel.LoadUserProfile = $appPoolLoadUserProfile\n Write-Output ('Setting: ManagedRuntimeVersion = {0}' -f $appPoolManagedRuntimeVersion)\n if ($appPoolManagedRuntimeVersion -eq 'No Managed Code') {\n $pool.ManagedRuntimeVersion = ''\n }\n else {\n $pool.ManagedRuntimeVersion = $appPoolManagedRuntimeVersion\n }\n Write-Output ('Setting: ManagedPipelineMode = {0}' -f $appPoolManagedPipelineMode)\n $pool.ManagedPipelineMode = $appPoolManagedPipelineMode\n Write-Output ('Setting: IdleTimeout = {0}' -f $appPoolIdleTimeout)\n $pool.ProcessModel.IdleTimeout = $appPoolIdleTimeout\n Write-Output ('Setting: MaxProcesses = {0}' -f $appPoolMaxProcesses)\n $pool.ProcessModel.MaxProcesses = $appPoolMaxProcesses\n Write-Output ('Setting: RegularTimeInterval = {0}' -f $appPoolRegularTimeInterval)\n $pool.Recycling.PeriodicRestart.Time = $appPoolRegularTimeInterval\n Write-Output ('Setting: QueueLength = {0}' -f $appPoolQueueLength)\n $pool.QueueLength = $appPoolQueueLength\n Write-Output ('Setting: CPU Limit (percent) = {0}' -f $appPoolCpuLimit)\n ## Limit is stored in 1/1000s of one percent\n $pool.Cpu.Limit = $appPoolCpuLimit * 1000\n Write-Output ('Setting: CPU Limit Action = {0}' -f $appPoolCpuAction)\n $pool.Cpu.Action = $appPoolCpuAction\n Write-Output ('Setting: Schedule = {0}' -f $appPoolPeriodicRecycleTime)\n $pool.Recycling.PeriodicRestart.Schedule.Clear()\n foreach($timestamp in $list) {\n $pool.Recycling.PeriodicRestart.Schedule.Add($timestamp)\n }\n if (Get-Member -InputObject $pool -Name StartMode -MemberType Properties)\n {\n Write-Output ('Setting: StartMode = {0}' -f $appPoolStartMode)\n $pool.StartMode = $appPoolStartMode\n }\n else\n {\n Write-Output ('IIS does not support StartMode property, skipping this property...')\n }\n $iis.CommitChanges()\n}",
"Octopus.Action.Script.Syntax": "PowerShell",
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.ScriptFileName": null,
"Octopus.Action.Package.NuGetFeedId": null,
"Octopus.Action.Package.NuGetPackageId": null
},
"Category": "IIS",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/iis-apppool-create.json",
"Website": "/step-templates/70a293d6-ee6a-4755-8e06-5f13d7e51fff",
"Logo": "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",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Tuesday, September 18, 2018