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

93 lines
3.4 KiB
PowerShell
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Variablen
# 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 =@(
"${hostname_ag}\musik",
"${hostname_ag}\bilder",
"${hostname_ag}\dokumente",
"${hostname_ag}\backup",
"${hostname_ag}\rest"
)
# Ziele als Array, Reihenfolge in beiden Arrays muss übereinstimmen
$ziel =@(
"${hostname_mg}\musik",
"${hostname_mg}\bilder",
"${hostname_mg}\dokumente",
"${hostname_mg}\backup",
"${hostname_mg}\rest"
)
# restliche Variablen
$pfad_ag = "\\NAS.XXXXX\replikation" # wo soll beim jeweils anderen alls DARIN gespeichert werden
$pfad_mg = "\\fileserver2.grote.lan\replikation"
$zeit_countdown = 2 # 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 = 64
# 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
}
# 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