Ist es möglich, einen sicheren USB-Autorun mit Task Scheduler unter Windows 7 auszuführen?

10436
Ville Koskinen

Ich habe herausgefunden, dass Windows 7 Autorun auf USB-Laufwerken nicht zulässt .

Ist es möglich, dies zu umgehen (auf sichere Weise), indem Sie eine Task mit dem Task Scheduler einrichten, der ausgelöst wird, wenn das USB-Laufwerk angeschlossen wird? Auf den ersten Blick konnte ich mit der Ereignisanzeige keine verwandten Ereignisse finden.

5

4 Antworten auf die Frage

4
mtone

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.

Sehr schön! Keine externen Programme erforderlich. Ich frage mich, warum das Signieren der Skripte so schwierig ist - scheint zu ermutigen, die Ausführungsrichtlinie auf uneingeschränkt zu setzen. Ville Koskinen vor 14 Jahren 1
2
subman

Nein, Sie können den Taskplaner nicht verwenden.

Das einzige protokollierte Ereignis, das ausgelöst wird, wenn Sie Ihr USB-Gerät anschließen, ist das Starten des Dienstes 'Portable Device Enumeration'. Sie können es jedoch nicht im Task-Manager verwenden, da dasselbe Ereignis ausgelöst wird, wenn ein Dienst gestartet und gestoppt wird. (Außerdem wird das Ereignis nicht ausgelöst, wenn der Dienst bereits ausgeführt wird, wenn Sie das Gerät anschließen.)

1
Snark

USB Safely Remove verfügt über eine solche Funktion: Es kann ein Programm gestartet werden, wenn ein USB-Gerät angeschlossen ist.

Eine weitere USB-Funktion zum sicheren Entfernen, die sie von ähnlicher Software unterscheidet, startet Anwendungen nicht nur nach dem Anschließen eines Geräts, sondern auch vor dem Entfernen. Mit der Autorun-Funktion können Sie vor dem Trennen einer Wechseldatenträger eine Datensicherung einrichten, Total Commander mit dem Inhalt des Pen-Laufwerks ausführen und ein verschlüsseltes TrueCrypt-Laufwerk automatisch aushängen, bevor Sie das USB-Medium trennen usw.

alt text

0
Wim ten Brink

Ich denke nicht, dass ein Taskplaner das richtige Werkzeug ist. Sie benötigen etwas, das jedes Mal reagiert, wenn ein neues USB-Gerät hinzugefügt wird. Dies würde eine spezielle Anwendung erfordern, die neue USB-Geräte erkennen kann und somit die Windows-Autorun-Funktion ersetzen würde.

Ja, eine solche Anwendung ist möglich. Es wäre jedoch eine Herausforderung zu schaffen.

Wenn Sie den Task-Scheduler verwenden, müssen Sie einfach immer wieder von alleine starten und immer und immer wieder und immer und immer wieder und immer wieder und immer wieder und immer wieder und immer wieder und immer wieder (immer wieder) Sie erhalten das Bild wieder. Sie benötigen einen Mechanismus, um die Verwendung des Autorun zweimal zu verhindern. Und Sie brauchen einen Mechanismus, der erkennt, ob ein Autorun verfügbar ist oder nicht, andernfalls erhalten Sie ewige Fehlermeldungen. Es ist, als würde man mit einem Hammer gegen die Wand schlagen und hoffen, dass dazwischen ein Nagel ist. Der Scheduler weiß nicht, wann er beginnen und wann er stoppen soll.