Public/Tasks/Invoke-ManageAppPoolTask.ps1
#Requires -Modules WebAdministration Set-StrictMode -Version 2.0 Function Invoke-ManageAppPoolTask { [CmdletBinding(SupportsShouldProcess=$true)] param( [Parameter(Mandatory=$true)] [string]$Name, [Parameter(Mandatory=$true)] [ValidateSet('start', 'stop', 'restart')] [string]$Action ) Function CheckAppPoolState { param( [Parameter(Mandatory=$true)] [string]$Name, [Parameter(Mandatory=$true)] [string]$RequiredState ) try { Write-Verbose "Checking state of App Pool '$Name'" $currentState = Get-WebAppPoolState -Name $Name } catch { Write-Warning "App Pool '$Name' does not exist." return $false #throw } if($currentState.Value -eq $RequiredState) { Write-Warning -Message "App Pool $Name is already $($currentState.Value)" return $false } return $true } Write-TaskInfo -Message $Name -Tag $Action $commandName = "$Action-WebAppPool" try { if($PSCmdlet.ShouldProcess($Name, $commandName)) { switch ($Action) { 'start' { if(CheckAppPoolState -Name $Name -RequiredState "Started") { Write-Verbose "Starting App Pool '$Name'" Start-WebAppPool -Name $Name } } 'stop' { if(CheckAppPoolState -Name $Name -RequiredState "Stopped") { Write-Verbose "Stopping App Pool '$Name'" Stop-WebAppPool -Name $Name } } 'restart' { $currentState = Get-WebAppPoolState -Name $Name if($currentState.Value -eq "Stopped") { Write-Warning -Message "App Pool $Name is currently $($currentState.Value)" Write-Verbose "Starting App Pool '$Name'" Start-WebAppPool -Name $Name } else { Write-Verbose "Restarting App Pool '$Name'" Restart-WebAppPool -Name $Name } } } } } catch { Write-Error $_ } } Register-SitecoreInstallExtension -Command Invoke-ManageAppPoolTask -As ManageAppPool -Type Task -Force Write-Verbose "Loaded $($MyInvocation.MyCommand.Path)" |