Symantec BackupExec PowerShell Job Report

Script Info

This script will connect to Symantec BackupExec server and using PowerShell, it will collect the following  information about the backup jobs:

  • Job Name
  • Selection Summary
  • Storage
  • Start Time
  • Elapsed Time
  • Job Status
  • Media Label
  • Total Data Size Bytes
  • Job Rate MB Per Minute

Script Filters

The script has two filters :

  • Name Like Expression: You can say for example give me jobs where the name contains “*OffSite*”
  • Time Expression: You can either use:
    • Since X Days : like give me all jobs happened since X days
    • From Last Job Run: give me the last job run information for the jobs

Script Parameters

Below is the list of Script Parameters:

.PARAMETER ScriptFilesPath
Path to store script files like “.\” to indicate current directory or full path like C:\myfiles

Send Mail after completion. Set to $True to enable. If enabled, -MailFrom, -MailTo, -MailServer are mandatory

Email address to send from.

Email address to send to.

Expression filter to filter on Job names. Example is “*OffSite*” to filter for any job with the word “OffSite” in the job name.

Filter jobs happening in the past X days.This parameter cannot be used with the -FromLastJobRun switch parameter

Switch parameter. When used, the script will bring only the last run job instances. This switch parameter cannot be used with the (-Days) parameter.


Script Examples

Get BackupExec Jobs and send email with the results
\Get-BEJobs.ps1 -ScriptFilesPath .\ -SendMail:$true -MailFrom -MailTo -MailServer

Get BackupExec Jobs happening in the last 3 days
\Get-BEJobs.ps1 -ScriptFilesPath .\ -Days 3

Get BackupExec Jobs with the name containing “*Yearly*”
\Get-BEJobs.ps1 -ScriptFilesPath .\ -NameLike “*Yearly*”

Get BackupExec Jobs with the name containing “*Yearly*” and only returning the last job run results
\Get-BEJobs.ps1 -ScriptFilesPath .\ -NameLike “*Yearly*” -FromLastJobRun

Get BackupExec Jobs with the name containing “*Yearly*” happening last week
\Get-BEJobs.ps1 -ScriptFilesPath .\ -NameLike “*Yearly*” -Days 7

Script Output

The script will generate three log files:

  • Info Log : will help you track what the script is doing.
  • Error Log : in case of errors
  • Detailed Log : contains detailed information about each job run

The script will also generate a nice HTML table that contains the list of jobs and their information

The script has an option to send these info via an email if you choose to configure SMTP settings via one of the script parameters.

BackupExec PowerShell Report


The challenge i faced writing this script is querying the Media Label field because this field is represented by XML file returned from the Get-JobLog.

So if you write Get-Job |Get-JobHistory |GetJobLog

then you will have XML file with the media label information there. I had to do some string operations to extract the media label information.

The script should be running from within the BackupExec server and it is tested with BackupExec 2014 only.


Download Script

You can download the script from here Get-BEJobs

17 comments on “Symantec BackupExec PowerShell Job Report

    • Problem that they are not listed in same line but seperated in multiple it is hard to find a terminator where the tape list ends.. this is because im doing substring on the job log xml which is not easy and not object based.

  1. Ammar: Great Job on this. Pulling values like All Media Used and other useful metrics is not trivial, even when using the BE reporting tool. I do agree that multiple tapes / storage B2D files is valuable, but it also makes a bloated report. A consideration if you revise the script might be to add a hyperlink in the job name that would open the job log XML file. (Of course assuming read access to the Backup Exec log files). The script does work on BE2012 too.

  2. Ammar
    Thanks for looking into it. I wonder if Symantec just takes all the media labels from a given job log then just removes the duplicates and displays that output as All Media Used?

  3. Ammar, first of all, congrats for the fantastic script you’ve developed! I would like to ask why the report gives me the last ran jobs plus the queue jobs stated as N/A?

  4. Thank you very much for this script Ammar!

    When I run this script, I’m having many N/A jobs as output, Can I exclude this?
    If possible and you don’t know what I mean with N/A. I can send the output to you?

  5. Hey Ammar,

    I’m not all that familiar with powershell so I was wondering if you could tell me how to filter for two different job names at once? I’ve got it to filter for one but when I add a second one like this: “job 1”, “job 2” it just crashes and won’t run

  6. Hello Ammar,
    Very good script, I use it everyday
    Could you please add an option for TotalDataSizeBytes in GB ?
    I’m think it’s more practical.


  7. Hi Ammar

    Im wondering if you can help. I am writing a BEMCLI report tool for a customer. I want to Get the Server Names for each job schedule that has run in the last 24 hours.
    When you pipe Get-BEjob into Get-Bejobhistory the property SelectionSummary does not appear to flow through the pipeline. I want to output this SelectionSummary

    therefore i wanted to create 2x Variable for Get-BEJob & Get-BeJob | Get-bejobhistory and then create a custom function to pull the data from each variable and merge together in one output.

    I hope I have explained this well enough.

    here is a non working example of the code i have been attempting with varying success :

    $GetBESCHED = Get-BEJob | Where-Object {($_.JobType -eq “Backup”) -and ($_.Status -eq “Scheduled”)} | Select SelectionSummary
    $GetBESCHEDjob = Get-BEJob | Where-Object {($_.JobType -eq “Backup”) -and ($_.Status -eq “Scheduled”)} | Get-BEJobHistory | Where-Object {$_.EndTime -gt (Get-date).AddDays(-1)} | Select Name
    foreach ($SCHED in $GetBESCHED)
    $ServerName = @{‘Server(s) in Job’=$GetBESCHED}
    New-Object -TypeName psobject -Property $ServerName
    Foreach ($job in $GetBESCHEDjob)
    $JobName = @{‘Job Name’=$GetBESCHEDjob}
    New-Object -TypeName psobject -Property $JobName
    Write-Output $ServerName,$JobName | Format-List

    This kind of gives me what i want, but there is no way i can work out which servers failed for the last 24 hours for example. I can find out which job failed. but not which servers were in those jobs.

  8. Hello Ammar,

    We have around 130 Standalone servers in different locations, and almost all servers are installed BE 2014, shall we get all servers backup report in one excel? Please suggest.

  9. Does Symantec System Recovery have the same capabilities? I want to be able to query the backup status like it shows in the SSR console (i.e. Backed Up, Failed, etc)
    If so, how do you write a script for that?

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s