[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-
[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> »
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