Private/ConvertTo-ScheduledTaskResultMessage.ps1

#Requires -Version 5.1
function ConvertTo-ScheduledTaskResultMessage {
    <#
        .SYNOPSIS
            Converts an HRESULT code to a human-readable scheduled task result message
 
        .DESCRIPTION
            Maps common Windows Task Scheduler HRESULT codes to descriptive messages.
            Unknown codes are formatted as hexadecimal strings for diagnostic purposes.
            This is a private helper function used by Get-ScheduledTaskDetail.
 
        .PARAMETER ResultCode
            The HRESULT integer code returned by the Task Scheduler.
            Can be null if task run info was unavailable.
 
        .OUTPUTS
            System.String
            Returns a human-readable message describing the task result code.
 
        .NOTES
            Author: Franck SALLET
            Version: 1.0.0
            Last Modified: 2026-03-25
            Requires: PowerShell 5.1+ / Windows only
    #>

    [CmdletBinding()]
    [OutputType([string])]
    param(
        [Parameter(Mandatory = $false)]
        [AllowNull()]
        [object]$ResultCode
    )

    if ($null -eq $ResultCode) {
        return 'No run information available'
    }

    [int]$code = $ResultCode

    switch ($code) {
        0 {
            'Success (0x0)'
        }
        1 {
            'Incorrect function (0x1)'
        }
        2 {
            'File not found (0x2)'
        }
        10 {
            'Environment incorrect (0xA)'
        }
        267009 {
            'Task is currently running (0x41301)'
        }
        267011 {
            'Task has not yet run (0x41303)'
        }
        267014 {
            'Task terminated by user (0x41306)'
        }
        -2147020576 {
            'Operator or user refused (0x800710E0)'
        }
        -2147216609 {
            'Instance already running (0x8004131F)'
        }
        default {
            'Unknown (0x{0:X})' -f $code
        }
    }
}