Der Thread Taskplaner: Wie synchronisiere ich mein USB-Flashlaufwerk automatisch? hat diese Antwort von einem Benutzer namens Monotone, der PowerShell zusammen mit dem Taskplaner verwendet:
Ich hatte die gleiche Frage wie Sie und habe etwas mit Powershell (in Windows eingebautes Scripting) mit Techniken aus dem Scripting Guy Blog hier und hier ausgearbeitet . Das Skript wird kontinuierlich als Hintergrundprozess ausgeführt, den Sie bei der Systemanmeldung mit Task Scheduler starten können. Das Skript wird benachrichtigt, wenn ein neues Laufwerk angeschlossen wird, und führt dann etwas aus (hier konfigurieren Sie das Skript und nicht die Task). Da es beim Warten auf das nächste gesteckte Laufwerk grundsätzlich pausiert ist, sollten Sie nicht feststellen, dass es viel Ressourcen beansprucht. Hier geh ich hin:
1) Starten Sie Powershell ISE, das Sie in Ihrem Startmenü unter Zubehör / Windows Powershell finden. 2) Kopieren Sie folgendes in Powershell:
#Requires -version 2.0 Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange write-host (get-date -format s) " Beginning script..." do{ $newEvent = Wait-Event -SourceIdentifier volumeChange $eventType = $newEvent.SourceEventArgs.NewEvent.EventType $eventTypeName = switch($eventType) { 1 {"Configuration changed"} 2 {"Device arrival"} 3 {"Device removal"} 4 {"docking"} } write-host (get-date -format s) " Event detected = " $eventTypeName if ($eventType -eq 2) { $driveLetter = $newEvent.SourceEventArgs.NewEvent.DriveName $driveLabel = ([wmi]"Win32_LogicalDisk='$driveLetter'").VolumeName write-host (get-date -format s) " Drive name = " $driveLetter write-host (get-date -format s) " Drive label = " $driveLabel # Execute process if drive matches specified condition(s) if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror') { write-host (get-date -format s) " Starting task in 3 seconds..." start-sleep -seconds 3 start-process "Z:\sync.bat" } } Remove-Event -SourceIdentifier volumeChange } while (1-eq1) #Loop until next event Unregister-Event -SourceIdentifier volumeChange
3) Sie müssen das obige Skript ändern, um dem Skript mitzuteilen, nach welchem Laufwerk gesucht und was ausgeführt werden soll. Die zwei zu ändernden Zeilen sind:
if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')
Meine USB-Festplatte namens 'Mirror' ist als Laufwerk Z: festgelegt. Sie könnten es einfach verwenden,
if ($driveLabel -eq 'MyDiskLabel')
wenn Sie sich nicht für den Brief interessieren.start-process "Z:\sync.bat"
Pfad der beliebigen Aufgabe, die Sie ausführen möchten. In meinem Beispiel habe ich eine Batch-Datei auf meinem USB-Laufwerk erstellt, die 3-4 Befehlszeilen für Sicherungsaufgaben startet.
4) Wenn Sie fertig sind, speichern Sie Ihr Skript an einer beliebigen Stelle (Erweiterung
.ps1
) und erstellen Sie anschließend eine Aufgabe im Taskplaner, damit das Skript im Hintergrund ausgeführt wird. Meines sieht so aus:
- Auslöser: Beim Anmelden
- Aktion: Starten Sie ein Programm
- Programm / Skript: Powershell
- Argumente hinzufügen:
-ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1"
5) Voilà!
6) Extra Sachen:
Wenn Ihr Skriptfenster ausgeblendet werden soll, verwenden Sie folgende Argumente:
- Argumente hinzufügen:
-WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1"
Wenn Sie die Skriptnachrichten in eine Protokolldatei ausgeben möchten (die bei jedem Start des Skripts, dh bei der Anmeldung, überschrieben wird), verwenden Sie die folgende Taskaktion:
- Programm / Skript: cmd
- Argumente
/c powershell -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1" > "D:\Stuff\script
hinzufügen : log.txt "Wenn Sie das laufende verborgene Skript beenden möchten, können Sie den "Powershell" -Prozess im Task-Manager beenden.
Der einzige Nachteil ist, dass nichts läuft, wenn Sie Ihren Computer mit bereits angeschlossenem Laufwerk booten. (Das Skript könnte geändert werden, um zunächst eine erste Überprüfung durchzuführen, aber ich habe genug für heute!)