Public/Get-DatabricksJob.ps1

function Get-DatabricksJob {
  [CmdletBinding()]
  param(
    [switch] $PassThru
  )

  $PageToken = $null
  $PageCount = 0
  $ListedCount = 0
  $RetrievedCount = 0
  $StartedAt = Get-Date

  do {
    $PageCount++
    Write-Progress -Activity 'Databricks Jobs' -Status "Listing page $PageCount"

    if ($PageToken) {
      $Result = & databricks jobs list --limit 100 "--page-token=$PageToken" -o json | ConvertFrom-Json
    }
    else {
      $Result = & databricks jobs list --limit 100 -o json | ConvertFrom-Json
    }

    $Jobs = @()
    if ($Result -is [System.Array]) {
      $Jobs = $Result
    }
    elseif ($Result.jobs) {
      $Jobs = $Result.jobs
    }

    $ListedCount += $Jobs.Count

    foreach ($Job in $Jobs) {
      if ($Job.job_id) {
        $RetrievedCount++
        Write-Progress -Activity 'Databricks Jobs' -Status "Retrieving job $RetrievedCount" -CurrentOperation "job_id: $($Job.job_id)"

        $JobDetail = & databricks jobs get $Job.job_id -o json | ConvertFrom-Json
        if ($PassThru) {
          $JobDetail
        }
      }
    }

    if ($Result -is [System.Array]) {
      $PageToken = $null
    }
    else {
      if ($Result.next_page_token) {
        $PageToken = $Result.next_page_token.ToString().Trim()
      }
      else {
        $PageToken = $null
      }
    }
  } while ($PageToken)

  Write-Progress -Activity 'Databricks Jobs' -Completed

  if (-not $PassThru) {
    $Elapsed = (Get-Date) - $StartedAt
    [PSCustomObject]@{
      ListedJobs      = $ListedCount
      RetrievedJobs   = $RetrievedCount
      Pages           = $PageCount
      DurationSeconds = [math]::Round($Elapsed.TotalSeconds, 2)
    }
  }
}