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 den folgenden Befehl in die Powershell.
#Erfordert -Version 2.0 Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange write-host (get-date -format s) "Beginn des Skripts ..." tun{ $ newEvent = Wait-Event-SourceIdentifier volumeChange $ eventType = $ newEvent.SourceEventArgs.NewEvent.EventType $ eventTypeName = switch ($ eventType) { 1 {"Konfiguration geändert"} 2 {"Gerät Ankunft"} 3 {"Gerät entfernen"} 4 {"Andocken"} } write-host (get-date -format s) "Ereignis erkannt =" $ eventTypeName if ($ eventType -eq 2) { $ driveLetter = $ newEvent.SourceEventArgs.NewEvent.DriveName $ driveLabel = ([wmi] "Win32_LogicalDisk = '$ driveLetter'")). VolumeName write-host (get-date -format s) "Laufwerkname =" $ Laufwerkbuchstabe write-host (get-date -format s) "Drive label =" $ driveLabel # Prozess ausführen, wenn das Laufwerk die angegebenen Bedingungen erfüllt if ($ driveLetter -eq 'Z:' -and $ driveLabel -eq 'Mirror') { write-host (get-date -format s) "Task in 3 Sekunden starten ..." Start-Schlaf-Sekunden 3 Startvorgang "Z: \ sync.bat" } } Remove-Event -SourceIdentifier volumeChange } while (1-eq1) #Loop bis zum nächsten Ereignis 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 auf meinem USB-Laufwerk eine Batchdatei erstellt, die 3-4 Sicherungsaufgaben startet, aber es kann alles sein.
4) Wenn Sie fertig sind, speichern Sie Ihr Skript irgendwo (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-Datei "D: \ Stuff \ Backup script.ps1"
5) Voilà!
6) Zusätzliches: Wenn Sie möchten, dass Ihr Skriptfenster ausgeblendet wird, verwenden Sie folgende Argumente:
- Argumente hinzufügen: -WindowStyle Hidden -ExecutionPolicy Unrestricted -Datei "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
- Fügen Sie Argumente hinzu: / c Powershell -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D: \ Stuff \ Backup script.ps1"> "D: \ Stuff \ script log.txt"
Wenn Sie das laufende verborgene Skript beenden möchten, können Sie den "Powershell" -Prozess im Task-Manager beenden.