Public/Tasks/Invoke-KillAppPoolTask.ps1

#Requires -Modules WebAdministration

Set-StrictMode -Version Latest

Write-Verbose "Loading $($MyInvocation.MyCommand.Path)"

Function Invoke-KillAppPoolTask {
    [CmdletBinding(SupportsShouldProcess=$true)]
    param(
        [Parameter(Mandatory=$true)]
        [string]$Name
    )

    $appPoolPath = "IIS:\AppPools\$Name"
    if (Test-Path -Path $appPoolPath) {

        $appPoolWorkers = Get-ChildItem $appPoolPath\WorkerProcesses
        if ($appPoolWorkers) {
            $appPoolWorkers | ForEach-Object {
                $processId = $_.processId
                if ($processId) {
                    $appPoolProcessInfo = "$Name [$processId]"
                    $message = "Killing AppPool process: $appPoolProcessInfo"
                    if ($PSCmdLet.ShouldProcess("$appPoolProcessInfo", "$message" )) {
                        Write-TaskInfo $message -Tag 'KillAppPool'
                        Invoke-KillProcessTask -processId $processId
                    }
                }
            }
        }
    } else {
        Write-TaskInfo "AppPool $Name does not exist" -Tag 'KillAppPool'
    }
}
Register-SitecoreInstallExtension -Command Invoke-KillAppPoolTask -As KillAppPool -Type Task -Force

Write-Verbose "Loaded $($MyInvocation.MyCommand.Path)"