$Jobs = Get-VBRJob $JobsMetrics = New-Object -TypeName 'System.Collections.ArrayList' $allFailedTasks = 0 foreach ($job in $Jobs) { $jobMetric = New-Object -TypeName PSObject $jobMetric | Add-Member -MemberType NoteProperty -Name name -Value $job.Name $jobMetric | Add-Member -MemberType NoteProperty -Name status -Value $job.GetLastState().ToString() $jobMetric | Add-Member -MemberType NoteProperty -Name result -Value $job.GetLastResult().ToString() $session = $job.FindLastSession() $jobMetric | Add-Member -MemberType NoteProperty -Name start_time_utc -value $session.Progress.StartTimeUtc.ToFileTimeUtc() $jobMetric | Add-Member -MemberType NoteProperty -Name stop_time_utc -value $session.Progress.StopTimeUtc.ToFileTimeUtc() $jobMetric | Add-Member -MemberType NoteProperty -Name total_objects -value $session.Progress.TotalObjects $jobMetric | Add-Member -MemberType NoteProperty -Name processed_objects -value $session.Progress.ProcessedObjects $jobMetric | Add-Member -MemberType NoteProperty -Name duration -value $session.Progress.Duration.TotalMilliseconds $logs = $session.Logger.GetLog().UpdatedRecords $logMetrics = New-Object -TypeName 'System.Collections.ArrayList' foreach ($log in $logs) { $logMetric = New-Object -TypeName PSObject $logMetric | Add-Member -MemberType NoteProperty -Name status -Value $log.Status.ToString() $logMetric | Add-Member -MemberType NoteProperty -Name title -Value $log.Title $logMetric | Add-Member -MemberType NoteProperty -Name description -Value $log.Description $logMetric | Add-Member -MemberType NoteProperty -Name update_time -Value $log.UpdateTime.ToFileTimeUtc() $i = $logMetrics.Add($logMetric) } $jobMetric | Add-Member -MemberType NoteProperty -Name logs -Value $logMetrics $tasks = $session.GetTaskSessions() $TaskMetrics = New-Object -TypeName 'System.Collections.ArrayList' $faildTasks = 0 foreach ($task in $tasks) { $taskMetric = New-Object -TypeName PSObject $taskMetric | Add-Member -MemberType NoteProperty -Name status -Value $task.Status.ToString() $taskMetric | Add-Member -MemberType NoteProperty -Name name -Value $task.Name $taskMetric | Add-Member -MemberType NoteProperty -Name reason -Value $task.Info.Reason if ($task.Status -gt 0) { $faildTasks = $faildTasks + 1 $allFailedTasks = $allFailedTasks + 1 } $i = $TaskMetrics.Add($taskMetric) } $jobMetric | Add-Member -MemberType NoteProperty -Name tasks -Value $TaskMetrics $jobMetric | Add-Member -MemberType NoteProperty -Name failed_objects -Value $faildTasks $i = $JobsMetrics.Add($jobMetric) } $Metric = New-Object -TypeName PSObject $Metric | Add-Member -MemberType NoteProperty -Name jobs -Value $JobsMetrics Write-Host "<-Start Metrics->" $Metric | ConvertTo-Json -Depth 4 Write-Host "<-End Metrics->" if ($allFailedTasks -gt 0) { Write-Host "<-Start Diagnostic->" foreach ($job in $Metric.jobs) { Write-Host "Job:" $job.name Write-Host "Status:" $job.status Write-Host "Result:" $job.result Write-Host "Duration:" $job.duration Write-Host "Total Object:" $job.total_objects Write-Host "Processed Objects:" $job.processed_objects Write-Host "Failed Objects:" $job.failed_objects Write-Host "Logs:" foreach ($log in $job.logs) { Write-Host " " $log.title } Write-Host "Tasks:" foreach ($task in $job.tasks) { Write-Host " " $task.status : $task.name - $task.reason } Write-Host "-------------------" } Write-Host "<-End Diagnostic->" Write-Host "<-Start Status->" Write-Host $allFailedTasks "Failed Tasks" Write-Host "<-End Status->" exit 1 } else { Write-Host "<-Start Status->" Write-Host "OK" Write-Host "<-End Status->" exit 0 }