Ich hatte die gleiche Frage wie Sie und habe etwas mit Powershell (Windows Built-In Scripting) ausgearbeitet, wobei ich Techniken aus dem Scripting Guy Blog hier und hier verwendet habe . Das Skript wird kontinuierlich als Hintergrundprozess ausgeführt, den Sie bei der Systemanmeldung mit dem Taskplaner starten können. Das Skript wird benachrichtigt, wenn ein neues Laufwerk angeschlossen wird und dann etwas unternommen wird (hier konfigurieren Sie das Skript und nicht die Aufgabe). Da es während des Wartens auf das nächste angeschlossene Laufwerk im Wesentlichen angehalten wird, sollten Sie nicht feststellen, dass es viel Ressourcen beansprucht. Hier gehe ich:
1) Starten Sie Powershell ISE, das Sie in Ihrem Startmenü unter Zubehör / Windows Powershell finden. 2) Kopiere und füge folgendes in Powershell ein:
#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 mit dem Namen "Mirror" ist als Z: -Laufwerk eingestellt. Du if ($driveLabel -eq 'MyDiskLabel')
könntest es einfach benutzen, wenn dir der Brief egal wäre.
start-process "Z:\sync.bat"
Pfad für jede Aufgabe, die Sie ausführen möchten. In meinem Beispiel habe ich eine Batch-Datei auf meinem USB-Laufwerk erstellt, mit der 3-4 Befehlszeilen für Sicherungsaufgaben gestartet werden.
4) Wenn Sie fertig sind, speichern Sie Ihr Skript an einer beliebigen Stelle (Erweiterung .ps1
) und erstellen Sie dann im Taskplaner eine Aufgabe, damit Ihr Skript im Hintergrund ausgeführt wird. Meins sieht so aus:
- Auslöser: Bei der Anmeldung
- 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 diese 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 beim Anmelden, ü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 "
Wann immer Sie das laufende versteckte Skript beenden möchten, können Sie den "Powershell" -Prozess im Task-Manager beenden.
Der einzige Nachteil ist, dass nichts ausgeführt wird, wenn Sie Ihren Computer mit angeschlossenem Laufwerk starten.