Es gibt mal wieder ein neues PowerShell Script für SCDPM. Aufgrund vieler Anfragen von Kollegen und aus der Community, gibt es in diesem Skript viele Neuerungen.
Erste große Änderung, man kann das Script nun mittels Parametern aufrufen, somit ist es möglich das Script als Task laufen zu lassen.
Zusätzlich kann das Logfile per Mail versendet werden, danach gab’s noch einige Anpassungen in der Logik und bei der Abfrage der DS.
Das Script
Zu Beginn die neuen Parameter, was euch die Möglichkeit bietet das Skript per Task, oder auch in der ISE auszuführen.
#Parameter Param( [Parameter(Mandatory=$false)][string]$DPMServerName, [Parameter(Mandatory=$false)][string]$Spandays, [Parameter(Mandatory=$false)][switch]$Checkonly, [Parameter(Mandatory=$false)][switch]$LogPublic, [Parameter(Mandatory=$false)][switch]$SendLogFile, [Parameter(Mandatory=$false)][string]$SMTPServer, [Parameter(Mandatory=$false)][string]$SMTPSender, [Parameter(Mandatory=$false)][string]$SMTPTo ) #Import Modules Import-Module dataprotectionmanager #Testing #$LogPublic=$true #$Checkonly=$true #$SendLogFile=$True #$SMTPServer="ExchangeServer01" #$SMTPSender="DPM_Alerts@techguy.at" #$SMTPTo="michael@techguy.at" #Standard Parameters if empty if (!($DPMServerName)){$DPMServerName=$env:COMPUTERNAME} if (!($Spandays)){$Spandays="10"}
Danach folgen ein paar Einstellungen und unser Funktionen
$Log=@() Get-Datasource -DPMServerName $DPMServerName | Out-Null $DS=Get-Datasource -DPMServerName $DPMServerName | where {$_.CurrentProtectionState -eq "Protected"} $Date=Get-Date -format d ((Get-Date).adddays(-$Spandays)) $Footer=" `r`n `r`n Script powered by www.techguy.at Find more Information at https://www.techguy.at/tag/checklastbackups/ " #Functions Function Write-Log ($Text) { # Write Log to PS if $LogPublic is Yes if ($LogPublic) { if ($Text -match "INFO:") { Write-Host $Text -ForegroundColor Green } elseif ($Text -match "WARNING:") { Write-Host $Text -ForegroundColor Yellow } elseif ($Text -match "ERROR:") { Write-Host $Text -ForegroundColor Red } else { Write-Host $Text } } return $Text } Function Query-DSJobs ($DS) { # Query DS if there is an active Job if ((Get-DPMJob -Datasource $DS -Status InProgress).count -ne 0) { $Log+=Write-Log "WARNING: There is a running Job for DS: $DS.Name" return $False } else { $Log+=Write-Log "INFO: No running Jobs for DS: $DS.Name" return $True } }
Zum Schluss wie gehabt die Magie, sprich der Ablauf unseres Scriptes.
#Magic Foreach ($Entry in $DS) { $RP=Get-RecoveryPoint -Datasource $Entry | Sort-Object BackupTime -Descending if ($RP.count -gt 0) { $CompareDate=Get-date($RP[0].BackupTime) -format d $Span=New-TimeSpan -Start $CompareDate -End $Date if ($Span.Days -gt 0) { $Log+=Write-Log "Error: $CompareDate, $Date, $Entry" if ($Entry.State -eq "Invalid") { if (!($Checkonly)) {if (Query-DSJobs $Entry) {Start-DPMDatasourceConsistencyCheck -Datasource $Entry}} } else { if (!($Checkonly)) {if (Query-DSJobs $Entry) {New-RecoveryPoint -Datasource $Entry -Disk -BackupType expressfull –WithDataIntegrityCheck -Verbose}} } } else { $Log+=Write-Log "Info: $CompareDate, $Date, $Entry" } } elseif ($RP.count -eq 0) { $Log+=Write-Log "Error: no Recoverpoint $Entry" if (!($Checkonly)) {if (Query-DSJobs $Entry) {Start-DPMDatasourceConsistencyCheck -Datasource $Entry}} } } if ($SendLogfile) { $Mailtext=$Log -join "`r`n" $Mailtext=$Mailtext+ $Footer Send-MailMessage -From $SMTPSender -SmtpServer $SMTPServer -To $SMTPTo -Subject "RP Status from $DPMServerName" -Body $Mailtext }
Screenshots
TechNet Gallery Download
Download auf der TechNet Gallery: https://gallery.technet.microsoft.com/Check-DPM-for-last-96f12c86
Solltet ihr Fragen, Wünsche oder Probleme mit dem Script haben, schreibt mir ein Kommentar
Alle meine TechNet Gallery Downloads findet ihr hier: 1jrYQoA
BITTE BEWERTET MEINE DOWNLOADS IN DER TECHNET GALLERY UND SAGT MIR WAS IHR EUCH VON DER NÄCHSTEN VERSION WÜNSCHT.
Michael Seidl aka Techguy