Robocopy - Powershell wekelijks backup schema

PowershellOmdat 'weekday.com' niet werkt op 64-bit systemen, heb ik een powershell script (gevonden op internet) aangepast zodat deze hetzelfde doet als het script 'Robocopy - Wekelijks backup schema'. Nu dus echter op basis van Powershell, wat wel werkt op 64-bit systemen.

Met dit script kun je dus een robocopy commando uitvoeren dat op basis van de dag van de week de doel-directory aanpast, dus de kopie van de bestanden gaan op maandag naar de map 'maandag' (monday), dinsdag naar de map 'dinsdag' enzovoort.

 

Wel even opletten, voordat je in powershell scripts kunt uitvoeren, moet je eerst de volgende opdracht in een Powershell-prompt uitvoeren, anders gaat het niet lukken:

Set-ExecutionPolicy RemoteSigned

Vervolgens kun je het script via een command-prompt uitvoeren: powershell -command "& 'd:\temp\daybackup.ps1' "
(je moet dan natuurlijk wel onderstaand script opslaan onder de naam daybackup.ps1). Het script staat ook in de downloads.

Als je niet wilt dat het script een mail stuurt, dan twee hekjes (##) zetten voor regel 68 en 72.

 

## gebaseerd op script van https://blog.sat.iit.edu/2011/11/backup-script-using-robocopy-and-powershell/
## uitvoeren met: powershell -command "& 'd:\temp\daybackup.ps1' "


## Brondirectory
$bron="d:\temp\test1"
 
## Basis van de doeldirectory, hieronder wordt automatisch de dag vd week aangemaakt, mag natuurlijk ook een share zijn
## dan dus "\\server\share"
$basis="d:\temp\test2\"
 
## Plaats van het logbestand
$logbestand="d:\temp\logbestand.txt"
 
## Het volgende bestand wordt gebruikt om te controleren
## of de backup gelukt is
$backupRapport="d:\temp\rapport.txt"
 
## Aanpassen zoals benodigd
$successEmailTo="emailaanadres.nl"
$successEmailSubject="Backup gelukt"
$successEmailBody="De backup is gelukt"
$successEmailFrom="emailvanvanadres.nl"
$successEmailSMTPServer="smtp.server.nl"
 
$failEmailTo="emailaanadres.nl"
$failEmailSubject="Backup mislukt"
$failEmailBody="De backup is mislukt, aub controleren"
$failEmailFrom="emailvanadres.nl"
$failEmailSMTPServer="smtp.server.nl"
 
## =========================================================
## ======== HIERONDER HET SCRIPT NIET AANPASSEN ============
## =========================================================

## Dag van de week bepalen
$a=Get-Date
$doel=$basis+$a.DayOfWeek

## controleren of doel inclusief dagnaam bestaat, zo niet, dan dagnaamfolder aanmaken
if (!(Test-Path -path $doel))
{
New-Item $doel -type directory
}
 
## robocopy commando
robocopy $bron $doel *.* /XO /COPY:DATSO /E /purge /R:10 /log:$logbestand /NP
 
## controle variabelen maken om bron en doel te kunnen vergelijken
$controle1 = Dir $bron
$controle2 = Dir $doel
 
## Vergelijken van bron en doel, afwijkingen schrijven in backuprapport
Compare-Object $controle1 $controle2 -PassThru > $backupRapport
 
## functie voor het versturen van mail bij gelukte backup
function sendSuccessEmail{
send-mailmessage -from $successEmailFrom -to $successEmailTo -subject $successEmailSubject -body $successEmailBody -Attachments "$logbestand" -priority High -dno onSuccess, onFailure -smtpServer $successEmailSMTPServer
}
 
## functie voor het versturen van mail bij mislukte backup
function sendFailEmail{
send-mailmessage -from $failEmailFrom -to $failEmailTo -subject $failEmailSubject -body $failEmailBody -Attachments "$logbestand" -priority High -dno onSuccess, onFailure -smtpServer $failEmailSMTPServer
}
 
## als backuprapport leeg is, dan is de backup gelukt, dan mail sturen
$File = Get-ChildItem $backupRapport
if ($File.Length -eq 0) {sendSuccessEmail}
 
## als backuprapport niet leeg is, dan is er iets mis, dan mail sturen
$File = Get-ChildItem $backupRapport
if ($File.Length -gt 0) {sendFailEmail}