Functions/Public/Get-SaltJobStatus.ps1

<#
.SYNOPSIS
    Gets the status of a Salt job.
.DESCRIPTION
    This function will use the Invoke-SaltStackAPIMethod command to use the get_cmd_status, get_cmd_details and get_cmds methods on the cmd resource to get the status of a Salt job.
.EXAMPLE
    Get-SaltJobStatus -SaltConnection $SaltConnection -JobID $JobID
 
    This will return the status of $JobID.
.OUTPUTS
    PSCustomObject
.NOTES
    General notes
.LINK
#>

function Get-SaltJobStatus {
    [CmdletBinding(SupportsShouldProcess = $true)]
    param (
        # Salt connection object
        [Parameter(Mandatory = $true)]
        [SaltConnection]
        $SaltConnection,
        # JobID
        [Parameter(Mandatory = $true)]
        [String]
        $JobID
        
    )

    # This is how many records to return at a time. The default is 50. We're setting it to 1,000. Often used with page
    # Will need to update these functions if the number of possible minions grows to over 1,000.
    $limit = 1000

    # Getting Job Status

    # Array formatted with leading comma in order to work with SaltStack Config
    $array = @(,$JobID)

    $arguments = @{
        jids = $array
    }

    $returnCmdStatus = Invoke-SaltStackAPIMethod -SaltConnection $SaltConnection -Resource cmd -Method get_cmd_status -Arguments $arguments

    if ($returnCmdStatus.error) {
        $errorDetail = $returnCmdStatus.error.detail.state
        $errorMessage = $returnCmdStatus.error.message

        throw "$errorMessage - $errorDetail"

    } else {
        $jobStatus = $returnCmdStatus.ret
    }

    # Getting Job Details

    $arguments = @{
        jid = $JobID
        limit = $limit
    }

    $returndCmdDetails = Invoke-SaltStackAPIMethod -SaltConnection $SaltConnection -Resource cmd -Method get_cmd_details -Arguments $arguments

    if ($return.error) {
        $errorDetail = $returndCmdDetails.error.detail.state
        $errorMessage = $returndCmdDetails.error.message

        throw "$errorMessage - $errorDetail"

    } else {
        $jobDetails = $returndCmdDetails.ret.results
    }

    # Getting Job

    $arguments = @{
        jid = $JobID
        limit = $limit
    }

    $returndCmd = Invoke-SaltStackAPIMethod -SaltConnection $SaltConnection -Resource cmd -Method get_cmds -Arguments $arguments

    if ($return.error) {
        $errorDetail = $returndCmd.error.detail.state
        $errorMessage = $returndCmd.error.message

        throw "$errorMessage - $errorDetail"

    } else {
        $job = $returndCmd.ret.results
    }

    $properties = @{
        JobStatus = $jobStatus
        MinionDetails = $jobDetails
        State = $job.state
        JID = $job.jid
        User = $job.user
        StartTime = $job.start_time
        Expected = $job.expected
        Returned = $job.returned
        ReturnedGood = $job.returned_good
        ReturnedFailed = $job.returned_Failed
        NotReturned = $job.not_returned
        Function = $job.fun
        Origination = $job.origination
        IsHighstate = $job.is_highstate
        ScheduleName = $job.sched_name
        TargetName = $job.tgt_name
    }

    $obj = New-Object -TypeName PSCustomObject -Property $properties

    Write-Output -InputObject $obj | Select-Object JobStatus,State,ScheduleName,TargetName,MinionDetails,Function,Origination,StartTime,User,IsHighstate,JID,Expected,Returned,NotReturned,ReturnedGood,ReturnedFailed

}