Problem mit Powershell Backup-Skript
Hallo allerseits,
ich habe mir ein kleines Backup-Skript geschrieben, welches beim Einstecken eines USB Sticks dessen Inhalte auf die Platte kopiert (also Backup von USB-Stick nach Festplatte).
Grundidee ist, dass beim Einstecken des Sticks das Backup gestartet wird.
Hier das Skript:
Der USB-Stick wird vom Skript erkannt. Problem ist, dass die Funktion CopyFolder, welches das eigentliche Backup durchführt, nicht aufgerufen wird. Das Skript läuft bis zum Befehl
... und dann ist Schluss.
Die Ausgabe ist:
Ich komme da irgendwie nicht weiter - was habe ich übersehen?
Gruß Abid
ich habe mir ein kleines Backup-Skript geschrieben, welches beim Einstecken eines USB Sticks dessen Inhalte auf die Platte kopiert (also Backup von USB-Stick nach Festplatte).
Grundidee ist, dass beim Einstecken des Sticks das Backup gestartet wird.
Hier das Skript:
# [content:309121#1114968]
function CopyFolder($source, $dest) {
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
write-host "CopyFolder(${source},${dest})" -F Green
$Logfile = "c:\temp\backup-usb-stick-$(get-date -f yyyy-MM-dd_hh-mm-ss).txt"
Robocopy $source $dest /MIR /TEE /R:2 /LOG:$Logfile | Out-Null
[Windows.Forms.MessageBox]::Show("Die Dateien wurden von ${source} nach ${dest} gesichert.", "Sicherung", [Windows.Forms.MessageBoxButtons]::OK, [Windows.Forms.MessageBoxIcon]::Information)
}
Get-EventSubscriber | Unregister-Event -Force
Register-WmiEvent -Query "Select * From __InstanceCreationEvent Within 1 where TargetInstance isa 'Win32_LogicalDisk' and TargetInstance.DriveType = 2" -SourceIdentifier 'RemovableDetector' -Action {
Get-EventSubscriber | Unregister-Event -Force
$name = $Event.SourceEventArgs.NewEvent.TargetInstance.VolumeName
$drive = $Event.SourceEventArgs.NewEvent.TargetInstance.DeviceID
write-host "Wechselmedium '${name}' erkannt." -F Green
$volume = "USB STICK"
$target = "C:\Backup-USB_STICK"
if ($name -eq $volume) {
write-host "Dateien von ${drive} nach ${target} kopieren ..." -F Green
CopyFolder $drive $target
}
} | out-null
cls
write-host "Warten auf Wechselmedium ..." -F Green
while($true){sleep 1}
Der USB-Stick wird vom Skript erkannt. Problem ist, dass die Funktion CopyFolder, welches das eigentliche Backup durchführt, nicht aufgerufen wird. Das Skript läuft bis zum Befehl
write-host "Dateien von ${drive} nach ${target} kopieren ..." -F Green
Die Ausgabe ist:
Warten auf Wechselmedium ...
Wechselmedium 'USB STICK' erkannt.
Dateien von D: nach C:\Backup-USB_STICK kopieren ...
Ich komme da irgendwie nicht weiter - was habe ich übersehen?
Gruß Abid
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 358436
Url: https://administrator.de/contentid/358436
Ausgedruckt am: 13.11.2024 um 08:11 Uhr
2 Kommentare
Neuester Kommentar
The action runs in another context (event) which has no knowledge of the function CopyFolder because of scope. You need to declare the function as global for the event to be accessible..
Best regards
Tom
Best regards
Tom