
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


