Public/ps1/Job/Get-ApprxrRemoteJob.ps1

<#
    .SYNOPSIS
    Retrieves a remote job for a specified Apprxr pipeline.
 
    .DESCRIPTION
    Fetches a job assignment from the remote server for the given pipeline, processes the job, and logs the result. Handles SQL and file jobs as needed.
 
    .PARAMETER pipeline
    The name of the pipeline to retrieve a job for.
 
    .EXAMPLE
    Get-ApprxrRemoteJob -pipeline 'Pipeline1'
 
    .NOTES
    Used for remote job management and execution in Apprxr automation.
#>

function Get-ApprxrRemoteJob{
    param ($pipeline)   

        if (-not [string]::IsNullOrEmpty($pipeline) -and $pipeline -ne "Default") {
            $channelId = "?channelId=$($pipeline)"
        }

        $deliverResult = "api/services/app/RemoteControl/SetDeliveries"
        $getTask= "api/services/app/RemoteControl/GetAssignment$channelId"
    

        #Get the job from the server
        $job = (Get-ApprxrResult -request $getTask).result
        if (-not $job){
            return
        }
        try {

            Log("Receive the following job: $job")
            if ($job.Action -eq "SQL") {
                $result = Start-ApprxrJobSql -taskInformation $job
                $result | Add-Member -MemberType NoteProperty -Name "Id" -value $job.Id -Force -ErrorAction SilentlyContinue
            } elseif ($job.Action -eq "FILE") {
                $result = Start-ApprxrJobFile -Base64File $job.Base64File -FileLocation $job.FileLocation -Mode $job.Mode -FileName $job.FileName
                $result | Add-Member -MemberType NoteProperty -Name "Id" -value $job.Id -Force -ErrorAction SilentlyContinue
            }  elseif ($job.Action -eq "HTTP") {
                $result = Start-ApprxrJobHtml -taskInformation $job
                $result | Add-Member -MemberType NoteProperty -Name "Id" -value $job.Id -Force -ErrorAction SilentlyContinue
            } elseif ($job.Action -eq "START_PIPELINES") {
                $result = [PSCustomObject]@{
                    success = $true
                    message = Start-AllApprxrPipelines
                }
            } elseif ($job.Action -eq "GET_PIPELINES") {
                $result = [PSCustomObject]@{
                    success = $true
                    message = Get-AllApprxrPipelines
                }
            } elseif ($job.Action -eq "STOP_PIPELINES") {
                $result = [PSCustomObject]@{
                    success = $true
                    message = Stop-AllApprxrJobs
                }
            } elseif ($job.Action -eq "CREATE_PIPELINE") {
                $result = [PSCustomObject]@{
                    success = $true
                    message = Create-ApprxrPipelineJob
                }
            } elseif ($job.Action -eq "SELFUPDATE") {
                $result = [PSCustomObject]@{
                    success = $true
                    message = Start-ApprxrUpgrade
                }
            } elseif ($job.Action -eq "GET_VERSION") {
                $module = Get-Module -Name Apprxr -ListAvailable | Select-Object -First 1
                $version = if ($module) { $module.Version.ToString() } else { 'Unknown' }
                $result = [PSCustomObject]@{
                    success = $true
                    message = $version
                }
            } elseif ($job.Action -like 'POWERSHELL' -and $job.Command) {
                try {
                    $psResult = Invoke-Expression $job.Command
                    $result = [PSCustomObject]@{
                        success = $true
                        message = $psResult
                        executedCommand = $job.Command
                    }
                } catch {
                    $result = [PSCustomObject]@{
                        success = $false
                        message = ("PowerShell command failed: " + $_)
                        executedCommand = $job.Command
                    }
                }
            } else {
                $result = [PSCustomObject]@{
                    success = $false
                    message = ("There is no handler known for given action: " + $job.Action)
                }
            }
        } catch {
            $result = [PSCustomObject]@{
                success = $false
                message = ("There is a unhandled error: " + $_)
            }
        
        }

        # Send result to server
        $result | Add-Member -MemberType NoteProperty -Name "CreationDate" -value (Get-Date).ToString("o") 
        Get-ApprxrResult -request $deliverResult -body  ($result | ConvertTo-Json)
        

        Remove-Variable result
}