public/Get-AzureDatabricksJobStatus.ps1

function Get-AzureDatabricksJobStatus {
    <#
        .SYNOPSIS
            Returns an object representing the status of a single job defined on an Azure Databricks instance.
        .DESCRIPTION
            Returns an object representing the status or outcome of all runs or a single job run defined on an Azure Databricks instance. You can provide a RunID to filter for a specific job,
            and the function also supports filters for running or completed jobs.
        .PARAMETER Connection
            An object that represents an Azure Databricks API connection where you want to get a list of job runs from.
        .PARAMETER JobID
            The JobID of the job you want the status of.
        .PARAMETER RunType
            Filter for Active or Completed jobs.
        .NOTES
            Author: Drew Furgiuele (@pittfurg), http://www.port1433.com
            Website: https://www.igs.com
            Copyright: (c) 2019 by IGS, licensed under MIT
            License: MIT https://opensource.org/licenses/MIT
        .LINK
             
        .EXAMPLE
            PS C:\> Get-AzureDatabricksJobStatus -Connection $Connection
            Returns an array of objects that shows the outcome of all executions of all jobs on a given Azure Databricks instance.
        .EXAMPLE
            PS C:\> Get-AzureDatabricksJobRun -Connection $Connection -JobID 1
            Returns array of objects that shows the outcome executions of JobID 1 on a given Azure Databricks instance.
        #>
         
    Param (
        #Should accept JobObject, SubmittedJobObject, or JobID int
        [Parameter(Mandatory=$true)] [object] $Connection,
        [Parameter(Mandatory=$false)] [int] $JobID
    )

    begin {
        $TargetURI = $Connection.BaseURI.AbsoluteUri + "api/2.0/jobs/runs/list"
        if ($JobID) {
            $TargetURI += "?job_id=$JobID"
        }
    }

    process {
        $JobsRequest = New-AzureDatabricksRequest -Uri $TargetURI -AccessToken $Connection.AccessToken -UseBasicParsing $Connection.UseBasicParsing
        $JobStatus = $JobsRequest.Submit()
        
        ForEach ($j in $JobStatus.Runs) {
            $JobStatusObject = New-Object AzureDatabricksJobStatus
            $JobStatusObject.JobID = $j.job_id
            $JobStatusObject.RunID = $j.run_id
            $JobStatusObject.Status = $j.state.life_cycle_state
            $JobStatusObject.Result = $j.state.result_state
            $JobStatusObject.Message = $j.state.state_message
            $DateObject = New-Object -Type datetime -ArgumentList 1970, 1, 1, 0, 0, 0, 0
            $DateObject = $DateObject.AddMilliseconds($j.start_time)
            $JobStatusObject.StartTime = $DateObject
            $JobStatusObject.SetupDuration = $j.setup_duration
            $JobStatusObject.Duration = $j.execution_duration
            $JobStatusObject.CleanupDuration = $j.cleanup_duration
            $JobStatusObject.FinishTime = $DateObject.AddMilliseconds($j.setup_duration + $j.execution_duration + $j.cleanup_duration)
            $JobStatusObject.CreatedBy = $j.creator_user_name
            $JobStatusObject.JobName = $j.run_name
            $JobStatusObject
        }
       
    }
}