powershell_kopierscripte/replikation_dry_mg.ps1
2021-03-18 08:29:50 +01:00

103 lines
3.5 KiB
PowerShell

# Quellen als Array, Reihenfolge in beiden Arrays muss übereinstimmen
# also wenn Quelle Nr. 1 Musik bei mir ist, muss das Ziiel Nr. 1 Musik bei Papa sein
$quelle =@(
# ich
"${pfad_mg}\amd",
"${pfad_mg}\bilder",
"${pfad_mg}\mg",
"${pfad_mg}\musik",
"${pfad_mg}\hm",
"${pfad_mg}\proxmox",
"${pfad_mg}\tmp",
"${pfad_mg}\backup"
)
# Ziele als Array, Reihenfolge in beiden Arrays muss übereinstimmen
$ziel =@(
#ich
"${pfad_ag}\amd",
"${pfad_ag}\bilder",
"${pfad_ag}\mg",
"${pfad_ag}\musik",
"${pfad_ag}\hm",
"${pfad_ag}\proxmox",
"${pfad_ag}\tmp",
"${pfad_ag}\backup"
)
# Funktion: speichert den aktuellen Pfad(vgl. pwd) in Get-ScriptDirectory
function Get-ScriptDirectory {
$Invocation = (Get-Variable MyInvocation -Scope 1).Value
Split-Path $Invocation.MyCommand.Path
}
# Funktion: countdown, zählt von einem Wert herunter bis 0
# der Wert $laufzeit muss übergeben werden, muss int sein, gibt länge des Countdowns an
# Bsp.: set-countdown -laufzeit $zeit_countdown oder set-countdown -laufzeit 5
function set-countdown([int]$laufzeit){
for ($laufzeit; $laufzeit -gt 0; $laufzeit--){
Start-Sleep -s 1 # wartet 1 Sekunde
write-host -ForegroundColor RED $laufzeit
}
}
# Funktion: setze Timestamp, mit Rückgabewert
function get-timestamp{
$timestamp = (get-date -Format yyyy_MM_dd__HH_mm_ss)
return $timestamp
}
# restliche Variablen
$pfad_ag = "\\192.168.3.108\replikation" # wo soll beim jeweils anderen alls DARIN gespeichert werden
$pfad_mg = "\\fileserver2.grote.lan"
$zeit_countdown = 5 # ohne Anführungszeichen, sonst ist es ein String
$timestamp = get-timestamp # Ruft Funktion get-timestamp auf
$scriptpfad = Get-ScriptDirectory # setzt $scriptpfad auf den Wert von Get-ScriptDirectory
$bandwidth_ipg = 128
# Ausgabe Pfade
write-host "===================================="
write-host "Pfad_mg: "
write-host -ForegroundColor Yellow $pfad_mg
write-host "Pfad_ag: "
write-host -ForegroundColor Yellow $pfad_ag
write-host -ForegroundColor RED "Wenn die Pfade nicht passen hier abbrechen! ("$zeit_countdown"sec/Strg+C))"
write-host "===================================="
set-countdown -laufzeit $zeit_countdown # ruft Funktion Countdown auf
# Prüfe ob Quellordner existieren
write-host "Prüfe Quellordner"
write-host "===================================="
for ($i=0; $i -lt $quelle.length; $i++){
if((Test-Path $quelle[$i]) -eq $false){
write-host -ForegroundColor RED "Quellordner:" $quelle[$i] "existiert nicht!"
Exit # beendet Script
}
}
# Zielordner erstellen
# -Force gibt keine Fehler aus falls der Ordner schon existiert(vgl. mkdir -p)
write-host "Erstelle Zielordner"
write-host "===================================="
for ($i=0; $i -lt $ziel.length; $i++){
New-Item -ItemType "directory" -Force -Path $ziel[$i]
}
# Ruft Robocopy auf
for ($i=0; $i -lt $quelle.length; $i++){
for ($i=0; $i -lt $ziel.length; $i++){
write-host "`n===================================="
write-host "Von: " $quelle[$i]"`nNach:" $ziel[$i]
write-host "===================================="
robocopy $quelle[$i] $ziel[$i] /L /MIR /R:3 /W:10 /DST /TEE /IPG:$bandwidth_ipg /UNILOG+:"$scriptpfad\$timestamp.log"
# Robocopy Params
# /DST = Kompensiert Zeitunterschiede von einer Stunde aufgrund der Sommerzeit.
# /tee = Schreibt die Status Ausgabe in das Konsolenfenster sowie in die Protokolldatei.
# /L = dry-run
# /IPG $bandwidth_ipg https://www.deviousweb.com/2018/01/09/robocopy-throttle-bandwidth/
}
}
# ToDo
# [ ] Meldung Fehler + Abbruch