Scripts Veeam

Lister les job Veeam et s’envoyer le rapport par mail

[UPDATE]

J’ai créé un nouvel article car les CmdLets Veeam ne fonctionnent pas avec toutes les versions de Veeam.
Dorénavant, je vais chercher l’information à la source … sur le serveur SQL :

http://www.delahaye.fr/lister-les-jobs-veeam-via-sql/

[divider]

Ce script permet de ne pas être submergé par les mails de jobs envoyés par Veeam.

De ce fait vous recevez un seul email pour l’ensemble de vos jobs :

$ErrorActionPreference = « stop »<br /> <br /> #html styling<br /> $style =  » <style> »
$style = $style + « TABLE{border-width: 1px;border-style: solid;border-color: black;border-collapse: collapse;} »
$style = $style + « TH{border-width: 1px;padding: 1px;border-style:double;border-color: black;} »
$style = $style + « TD{border-width: 1px;padding: 5px;border-style:double;border-color: black;} »
$style = $style + « </style> »

#For debugging
#Get-PSSession | Remove-PSSession

#Reading config file
$ScriptPath = Split-Path -parent $MyInvocation.MyCommand.Definition
$Config =

[xml][/xml]

(Get-Content « $ScriptPathconfig.xml »)

###Create a new PSSession to each server in $VeeamSrvs and assign to a variable
$VeeamCreds = New-Object System.Management.Automation.PSCredential $Config.AppSettings.Creds.veeam.username, ($Config.AppSettings.Creds.veeam.EncryptedPass | ConvertTo-SecureString)

$VeeamSrvSessions = New-Object System.Collections.ArrayList
foreach ($VeeamSrv in $Config.AppSettings.VeeamSrvs.HostName)
{
$VeeamSrvSessions.add((New-PSSession -ComputerName $VeeamSrv -Credential $VeeamCreds)) | out-null
}
###

###Connect to each Veeam Server and add the Veeam Snapin
foreach ($VeeamSrvSession in $VeeamSrvSessions)
{
Invoke-Command -session $VeeamSrvSession -ScriptBlock
{
#Add Veeam snapin if needed
if ( (Get-PSSnapin -Name VeeamPSSnapIn -ErrorAction SilentlyContinue) -eq $null )
{
Add-PsSnapin -Name VeeamPSSnapIn
}
} -AsJob
}
Get-Job | Wait-Job
###

###Connect to all Veeam servers and return status on jobs that have warnings or failures and have completed within the last day
foreach ($VeeamSrvSession in $VeeamSrvSessions)
{
Invoke-Command -session $VeeamSrvSession -ScriptBlock
{$JobStatus = (Get-VBRJob | Where-Object {$_.GetLastResult() -ne « Success » -and $_.GetLastResult() -ne « None » -and $_.findlastsession().progress.stoptime -ge (Get-Date).addhours(-24)}) |
ForEach-Object {$_ | Select-object  @{Name= »Job »;Expression={$_.Name}}, @{Name= »Status »;Expression={$_.GetLastResult()}}, <br />          @{Name= »ID »;Expression={$_.id}}, @{Name= »Job Msg »;Expression={$_.FindLastSession().info.description}}, @{Name= »Session »;Expression={$_.FindLastSession()}}}<br />       <br />       if ($JobStatus -ne $null)<br />          {<br />          #Adding new properties to array<br />          $JobStatus | ForEach-Object {$_ | Add-Member -MemberType NoteProperty « Server » -Value $Env:COMPUTERNAME}
$JobStatus | ForEach-Object {$_ | Add-Member -MemberType NoteProperty « VM Msg » -Value $null}

#Collecting VM failure info
foreach ($JobStat in $JobStatus)
{
#Not supported by Veeam
$Info = [Veeam.Backup.Core.CBackupTaskSession]::GetByJobSession(($JobStat.Session | foreach-object {$_.info}).id)
$JobStat. »VM Msg » = ($info | ForEach-Object {$_} | Where-Object {$_.status -ne « Success »}) |
Foreach-object {$_ | Select-Object @{Name= »VM »;Expression={$_.ObjectName}}, @{Name= »Reason »;Expression={$_.Reason}} | Format-List | Out-String}<br />             }<br />          $JobStatus<br />          }<br />       } -AsJob<br />    }<br />    <br /> Get-Job | Wait-Job<br /> $JobStatus = Get-Job | Receive-Job<br /> ###<br /> <br /> #Closing open PS sessions<br /> Get-PSSession | Remove-PSSession<br /> <br /> ###Sending report<br /> #Mail settings<br /> $MailSrv = $Config.AppSettings.Email.SRV<br /> $MailFrom = $Config.AppSettings.Email.From<br /> $MailTo = $Config.AppSettings.Email.To<br /> $MailSbjt = « Veeam Job Status Report $(get-date) »<br /> $MailBody = ($JobStatus | Select-Object Job, Status, « Job Msg », « VM Msg », Server | Sort-Object Status -Descending |   ConvertTo-Html -Head $style | Out-String) <br />          -replace (« VM     : », »<p></p><b>VM:</b> ») <br />          -replace (« Reason : », »<p></p><b>Reason:</b> ») <br />          -replace (« <td>Failed », »<td bgcolor=red>Failed »)<br /> <br /> Send-MailMessage -SmtpServer $MailSrv -From $MailFrom -To $MailTo -Subject $MailSbjt -Body $MailBody -BodyAsHtml<br /> ###</p> <p> </p> <p>Le fichier xml permet de stocker toutes les instances de serveurs Veeam et de stocker le compte qui à les droits de lister les jobs</p> <p class= »codediv »>veeam-srv1.domain.comveeam-srv2.domain.comveeam-srv3.domain.comuser@domain.comveeam.domain.comveeam-report@domain.comuser@domain.com</p> »

2 Comments

2 Comments

  1. william

    27 octobre 2013 at 11h55

    bonjour

    est il possible d’avoir les bonnes sources du code concernant veaam
    Lister Les Job Veeam Et S’envoyer Le Rapport Par Mail
    pour pouvoir le tester

    par avance merci

    • Thomas Delahaye

      27 octobre 2013 at 12h17

      Bonjour William,

      En fait, les CmdLets ne fonctionnent pas avec toutes les versions de Veeam.

      C’est pourquoi depuis un moment, je vais chercher l’info directement au niveau du serveur SQL.
      Je viens de vous créer un article pour expliquer le fonctionnement :
      http://www.delahaye.fr/lister-les-jobs-veeam-via-sql/

      Bonne continuation

      Thomas

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Most Popular

To Top
Verified by MonsterInsights