private/Get-TerminalContainerState.ps1

function Get-TerminalContainerState($pod) {
    $terminalWaitingReasons = @(
        'CrashLoopBackOff', 'ImagePullBackOff', 'ErrImagePull',
        'CreateContainerConfigError', 'InvalidImageName', 'RunContainerError'
    )
    $allStatuses = @()
    if (Get-Member -InputObject $pod.status -Name containerStatuses -ErrorAction SilentlyContinue) {
        $allStatuses += $pod.status.containerStatuses | ForEach-Object { @{ cs = $_; kind = "container" } }
    }
    if (Get-Member -InputObject $pod.status -Name initContainerStatuses -ErrorAction SilentlyContinue) {
        $allStatuses += $pod.status.initContainerStatuses | ForEach-Object { @{ cs = $_; kind = "init container" } }
    }
    foreach ($entry in $allStatuses) {
        $cs = $entry.cs
        if ((Get-Member -InputObject $cs.state -Name waiting -ErrorAction SilentlyContinue) -and $cs.state.waiting) {
            if ($cs.state.waiting.reason -in $terminalWaitingReasons) {
                return @{ ContainerName = $cs.name; Kind = $entry.kind; Reason = $cs.state.waiting.reason; Message = $cs.state.waiting.message }
            }
        }
        if ((Get-Member -InputObject $cs.state -Name terminated -ErrorAction SilentlyContinue) -and $cs.state.terminated) {
            $t = $cs.state.terminated
            if ($t.exitCode -ne 0 -and $t.reason -ne 'Completed') {
                return @{ ContainerName = $cs.name; Kind = $entry.kind; Reason = $t.reason; Message = "exitCode=$($t.exitCode)" }
            }
        }
    }
    return $null
}