Error output in $Job variable?

Error output in $Job variable?

avatar
Product: PowerShell Universal
Version: 3.3.5


Hi, is it possible to access the error output in $Job variable? I’m not talking about regular output but specifically the error output.

Thanks!

avatar

Recommended Answer

Write-PSUError was intended to allow capturing error output without failing the script.

That said, I’m surprised it doesn’t show up in the Get-PSUJobOutput result. I’m glad you found a workaround.

Adam Driscoll
PowerShell Expert and Developer at Devolutions

All Comments (7)

avatar

In terms of the $Job variable, are you talking about calling Get-PSUJob and then trying to look at the error records?

Adam Driscoll
PowerShell Expert and Developer at Devolutions

avatar

In this specific case I’m looking to use the error output in a failed job trigger. The trigger is using the $Job variable as param where I’d like to fetch the error output. However, I can’t find this property in the variable.

I also tried running Get-PSUJob and Get-PSUJobOutput, but there is no error output to be found.

Here’s the job for reference:


f196283ffb550b80d5bbad86b6bf4b01ba70c078

f196283ffb550b80d5bbad86b6bf4b01ba70c078.png

avatar

I was able to accomplish this with this example.

Script.ps1

throw "No!"


Failed.ps1

param($Job)

Get-PSUJobOutput -JobId $Job.Id


triggers.ps1

New-PSUTrigger -Name "Failed" -EventType "JobFailed" -Environment "Default" -TriggerScript "Failed.ps1"


The trigger then receives the error output.



92b7eb503f2136b9ee659a9260a149ca0ba10c06

Adam Driscoll
PowerShell Expert and Developer at Devolutions

92b7eb503f2136b9ee659a9260a149ca0ba10c06.png

avatar

This is my test script (with faulty variable) and ErrorAction is set to Stop on the script:

Try {

    Connect-Graph -TenantId $TenantId -AppId $AppId -Certificate $Certificates | Out-Null

} Catch {
    
    Write-PSUError $_
} 


When I run Get-PSUJobOutput on the job, I get nothing. The record does show in the error section in the Web UI, however, UI also shows the Job as “Success” even though it failed. I guess Write-PSUError in the Catch clause doesn’t make the script seem as failed, even though error action is stop. Anyway, shouldn’t data written with Write-PSUError show up with Get-PSUJobOutput?.

For the time being, I settled for this:

Try {

    Connect-Graph -TenantId $TenantId -AppId $AppId -Certificate $Certificates | Out-Null

} Catch {

    $ErrorMessage = $_.Exception.Message + "`nLine " + ($_.InvocationInfo.ScriptLineNumber).ToString() + ": " + ($_.InvocationInfo.Line).Trim()
    Throw($ErrorMessage)
} 


This works as well as your example.

avatar

Write-PSUError was intended to allow capturing error output without failing the script.

That said, I’m surprised it doesn’t show up in the Get-PSUJobOutput result. I’m glad you found a workaround.

Adam Driscoll
PowerShell Expert and Developer at Devolutions

avatar

I would like to generate an email when a scheduled task fails.
The email should include the error message, the name of the script, and the time.
I see no examples of this. Am I missing something?
Thanks

avatar

I had this exact same wish. Was finally able to get it working with this in the trigger script:

# Define parameters
param($Job)

# Creating a detailed description of the job for the email
$details = @"
    ID: $($Job.Id)
    Start Time: $(ConvertTo-PacificTime (Get-Date $Job.StartTime))
    End Time: $(ConvertTo-PacificTime (Get-Date $Job.EndTime))
    Script: $($Job.Script)
    Computer Name: $($Job.ComputerName)
    Job Pipeline Outputs: $($Job.JobPipelineOutputs)
"@


I then was able to include the details in body of an email using send-mailmessage