hi everyone
I have customized a PowerShell script that reruns the Veeam job status. I believe the outcome is elegant.
here is my script:
#my veeam server
$remotehosts="192.168.1.11"
#in nested remoting use username as an example below
$username = "ENT-BACKUP-1\rservice"
$password = "xxxxxxxxx" | ConvertTo-SecureString -AsPlainText -Force
#Region Define Exite code
$ExitCode=@{
Up=0
Down=1
Warning=2
Critical=3
Unknown=4
}
# Create a PSCredential object using the username and password
$credential = New-Object System.Management.Automation.PSCredential ($username, $password)
#prepare Deployer configuration
$remotsession=New-PSSession -ComputerName $remotehosts -Credential $credential -Name rtunnel
Invoke-Command -Session $remotsession -ScriptBlock {
# Retrieve all Veeam Backup jobs
$job_name = Get-VBRJob
if ($job_name -ne $null)
{
# Iterate over each job and output its name, last result, and current state
foreach ($job in $job_name) {
$jobName = $job.Name
$job_Result = (Get-VBRJob -Name $jobName).GetLastResult()
$job_State = (Get-VBRJob -Name $jobName).GetLastState()
$job_session = (Get-VBRJob -Name $jobName).FindLastSession()
# Output the job information
[PSCustomObject]@{
JobName = $jobName
LastResult = $job_Result
LastState = $job_State
job_session = $job_session
}
if ( $job_session -eq $null )
{ $stat3=$stat4=$stat5=$stat6=0; }
else
{
$stat3=$job_session.jobtypestring;
$temp_stat4=$job_session.CreationTime;
$temp_stat5=$job_session.EndTime;
$stat4 = $temp_stat4.tostring("yyyy.MM.dd HH:mm")
$stat5 = $temp_stat5.tostring("yyyy.MM.dd HH:mm")
}
}
}
else {
Write-Host "Message: review powershell code"
$status = "Critical"
}
} | Export-Csv -Path E:\PWSH_script\temp_veeamjobsstatus.csv
$temp_veeam = Import-Csv -Path E:\PWSH_script\temp_veeamjobsstatus.csv
$temp_veeam | select JobName,LastResult,LastState | Export-Csv E:\PWSH_script\Veeam_jobs.csv
switch ($temp_veeam.LastResult)
{
"Success" { $stat1=0 }
"None" { $stat1=1 }
"Failed" { $stat1=2 }
default { $stat1=3 }
}
switch ($temp_veeam.LastState)
{
"Stopped" { $stat2=0 }
"Starting" { $stat2=1 }
"Working" { $stat2=2 }
"Stopping" { $stat2=3 }
"Resuming" { $stat2=4 }
"Pausing" { $stat2=5 }
default { $stat2=6 }
}
foreach ($taskName in ($temp_veeam).JobName) {
$lresult= $temp_veeam | Where-Object {$_.JobName -eq $taskName}
Write-host "Message.jobs_name: $taskname"
Write-host "Statistic.jobs_name: $stat1"
Write-host "Message.jobs_status: $($lresult.LastResult)"
Write-host "Statistic.jobs_status: $stat2"
$status = "up"
}
exit $ExitCode[$Status];
i use this code on my SAM module. and here is the output:


how can i separated each result on separate line, per jobs_name.
here is my moderm dashboard table:

my SWQL query:
SELECT
[table].ComponentName
,[table].ComponentMessage
,[table].MultiValueStatistics
FROM Orion.APM.ComponentAlert AS [table]
-- find component ID from Orion.APM.CurrentStatistics table
WHERE [table].ApplicationID = 39