WSB rapport sur Microsoft Teams (Webhook).
Pour continuer la série sur Windows Backup, je vous propose un script permettant de récupérer l’état des Backup Windows sur les serveurs du domaine et d’envoyer un jolie rapport par Email ou par un...
Pour continuer la série sur Windows Backup, je vous propose un script permettant de récupérer l’état des Backup Windows sur les serveurs du domaine et d’envoyer un jolie rapport par Email ou par un Webhook Teams !
Petit bonus: les commandes pour ajouter se script à un nouvelle tache planifiée pour un envoi automatique tout les jours !
| $jobname = "Windows_Backup_Teams" | |
| $action = New-ScheduledTaskAction –Execute "@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -ExecutionPolicy Bypass -File C:\Windows_Backup_Teams_Report.ps1" | |
| $trigger = New-ScheduledTaskTrigger -daily -At 7am | |
| $settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -StartWhenAvailable -DontStopOnIdleEnd | |
| Register-ScheduledTask -TaskName $jobname -Action $action -Trigger $trigger -RunLevel Highest -Settings $settings |
| $ServerList = (Join-Path $PSScriptRoot "BackupsSrv.txt") | |
| $webhook = 'Teams WebHook' | |
| $client = "Client Name" | |
| #Check if server list exists | |
| If (!(Test-Path $ServerList)) { | |
| Write-Host "Can not get servers list. Script will not continue" -ForegroundColor Red; Exit | |
| } | |
| $servers = @() | |
| $job_details = "" | |
| Get-Content $ServerList | Foreach-Object { $servers += $_ } | |
| $results = (1..$servers.length) | |
| for ($i = 0; $i -lt $servers.length; $i++) { | |
| $ConnectionError = 0 | |
| Write-Host "Getting result from server: " $servers[$i] | |
| try { | |
| $Session = New-PSSession -ComputerName $servers[$i] | |
| $WindowsVersion = Invoke-Command -session $session -ScriptBlock { (Get-WmiObject win32_operatingsystem).version } | |
| if ($WindowsVersion -match "6.1") | |
| { $WBSummary = Invoke-Command -session $session -ScriptBlock { add-pssnapin windows.serverbackup; Get-WBSummary } } | |
| else { $WBSummary = Invoke-Command -session $session -ScriptBlock { Get-WBSummary } } | |
| Remove-PSSession $Session | |
| } | |
| catch { | |
| Write-Host "Error connecting remote server" | |
| write-host "Caught an exception:" -ForegroundColor Red | |
| write-host "Exception Type: $($_.Exception.GetType().FullName)" -ForegroundColor Red | |
| write-host "Exception Message: $($_.Exception.Message)" -ForegroundColor Red | |
| $ConnectionError = 1 | |
| } | |
| $job_details += "## Serveur : " + $servers[$i] + "`n" | |
| if ($ConnectionError -eq 1) { | |
| $job_details += "- **Statut** : Error connecting remote server`n" | |
| } | |
| else { | |
| if ($WBSummary.LastBackupResultHR -eq 0) { $job_details += "- **Statut** : Success`n"; $result = "Success" } | |
| else { $job_details += "- **Statut** : Failure`n"; $result = "Failure" } | |
| $job_details += "- **Date** : " + $WBSummary.LastSuccessfulBackupTime + "`n" | |
| if ([string]::IsNullOrEmpty($WBSummary.DetailedMessage)) { $job_details += "- **Message** : Success`n"; $message = "Success" } | |
| else { $job_details += "- **Message** : " + $WBSummary.DetailedMessage + "`n"; $message = $WBSummary.DetailedMessage } | |
| $job_details += "- **Nombre de sauvegardes** : " + $WBSummary.NumberOfVersions + "`n" | |
| if ([string]::IsNullOrEmpty($WBSummary.LastBackupTarget)) { $job_details += "- **Destination** : None`n" } | |
| else { $job_details += "- **Destination** : " + $WBSummary.LastBackupTarget + "`n" } | |
| Write-Host "Last Backup Result: $result" | |
| Write-Host "Last Successful Backup Time:" $WBSummary.LastSuccessfulBackupTime | |
| Write-Host "Detailed Message: $message" | |
| Write-Host "Number of Backups:" $WBSummary.NumberOfVersions | |
| Write-Host "—————————————————————–" | |
| } | |
| } | |
| $body = ConvertTo-Json -depth 3 @{ | |
| summary = 'Rapport de sauvegarde' | |
| themeColor = '0055DD' | |
| sections = @( | |
| @{ | |
| activityTitle = "Sauvegarde du client: " + $client + "`n" | |
| activityText = "$job_details" | |
| } | |
| ) | |
| } | |
| Invoke-RestMethod -Method post -ContentType 'Application/Json' -Body $body -Uri $webhook |
https://gist.github.com/HiteaFR/47b7d8b8dc5445332cadb0707aba5de9#file-windows_backup_teams_report-ps1
Utilisation:
Attention: pour l’exemple tous les fichier sont placés directement à la racine du disque C:, pensez à changer les chemins dans le script si vous souhaitez les mettre autre part.
Commencez par créer un fichier BackupsSrv.txt et renseigner le nom de vos serveurs qui sont dans l’AD (un par ligne)
Ensuite créer un « channel » dans l’équipe Teams de votre choix et ajouter le connecteur « Webhook » à celle-ci
Pour finir il suffit de copier coller le l’url du webhook dans le script (ligne 3) et renseigner un nom pour le site/client dont vous voulez les rapports.
Bonus: exécutez les commandes du premier script pour créer un tache planifiée.