103 lines
3.5 KiB
PowerShell
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
|