Можно ли сделать безопасный автозапуск USB с помощью планировщика заданий в Windows 7?

10188
Ville Koskinen

Я обнаружил, что Windows 7 не позволяет автозапуск на USB-накопителях .

Можно ли обойти это (безопасным способом), настроив задачу с помощью Task Scheduler, который срабатывает при вставке USB-накопителя? На первый взгляд, я не смог найти связанных событий с Event Viewer.

5

4 ответа на вопрос

4
mtone

У меня был такой же вопрос, как и у вас, и я кое-что проработал с PowerShell (встроенным в Windows скриптингом) с использованием техник из Блога сценаристов здесь и здесь . Скрипт работает непрерывно как фоновый процесс, который вы можете запустить при входе в систему с помощью планировщика задач. Сценарий будет уведомлен всякий раз, когда подключен новый диск, и затем что-то предпринимает (здесь вы настраиваете сценарий, а не задачу). Так как он в основном приостановлен во время ожидания следующего подключенного диска, вы не должны обнаружить, что он занимает много ресурсов. Здесь я иду:

1) Запустите Powershell ISE, который можно найти в меню «Пуск» в разделе «Стандартные» / «Windows Powershell».

2) Скопируйте и вставьте следующее в Powershell.

#Requires -version 2.0 Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange write-host (get-date -format s) "Начальный скрипт ..." делать{ $ newEvent = Wait-Event -SourceIdentifier volumeChange $ eventType = $ newEvent.SourceEventArgs.NewEvent.EventType $ eventTypeName = switch ($ eventType) { 1 {"Конфигурация изменена"} 2 {"Прибытие устройства"} 3 {"Удаление устройства"} 4 {"стыковка"} } write-host (get-date -format s) "Событие обнаружено =" $ eventTypeName if ($ eventType -eq 2) { $ driveLetter = $ newEvent.SourceEventArgs.NewEvent.DriveName $ driveLabel = ([wmi] "Win32_LogicalDisk = '$ driveLetter'"). VolumeName write-host (get-date -format s) "Имя диска =" $ driveLetter write-host (get-date -format s) "Метка диска =" $ driveLabel # Выполнить процесс, если привод соответствует указанным условиям if ($ driveLetter -eq 'Z:' -and $ driveLabel -eq 'Mirror') { write-host (get-date -format s) "Запуск задачи через 3 секунды ..." начало-сон-секунды 3 старт-процесс "Z: \ sync.bat" } } Remove-Event -SourceIdentifier volumeChange } while (1-eq1) # цикл до следующего события Событие отмены регистрации -SourceIdentifier volumeChange 

3) Вам нужно изменить приведенный выше скрипт, чтобы указать скрипту, какой диск искать и что выполнять. Две строки для изменения:

  • if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')

    Мой жесткий диск USB с именем Mirror установлен как диск Z :. Вы можете просто использовать, if ($driveLabel -eq 'MyDiskLabel')если вы не заботитесь о письме.

  • start-process "Z:\sync.bat"

    Путь любой задачи, которую вы хотите сделать. В моем примере я создал пакетный файл на своем USB-накопителе, который запускает 3-4 задания резервного копирования, но это может быть что угодно.

4) Когда вы закончите, сохраните ваш скрипт где-нибудь (расширение .ps1), затем перейдите к созданию задачи в планировщике задач, чтобы ваш скрипт работал в фоновом режиме. Моя выглядит так:

  • Триггер: при входе в систему
  • Действие: запустить программу
  • Программа / скрипт: powershell
  • Добавьте аргументы: -ExecutionPolicy Unrestricted -File "D: \ Stuff \ Backup script.ps1"

5) Вуаля!

6) Дополнительные вещи: если вы хотите, чтобы окно вашего скрипта было скрыто, используйте следующие аргументы:

  • Добавьте аргументы: -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D: \ Stuff \ Backup script.ps1"

Если вы хотите вывести сообщения сценария в файл журнала (который перезаписывается при каждом запуске сценария, то есть при входе в систему), используйте следующее действие задачи:

  • Программа / скрипт: cmd
  • Добавьте аргументы: / c powershell -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D: \ Stuff \ Backup script.ps1"> "D: \ Stuff \ script log.txt"

В любое время, когда вы хотите завершить выполнение скрытого скрипта, вы можете завершить процесс «Powershell» в диспетчере задач.

Очень хорошо! Внешние программы не нужны. Интересно, почему подписание сценариев стало таким трудным делом - кажется, поощряет установку политики выполнения без ограничений. Ville Koskinen 14 лет назад 1
2
subman

Нет. Вы не можете использовать планировщик заданий.

Единственное зарегистрированное событие, которое возникает при подключении USB-устройства, - это запуск службы «Перечисление переносных устройств». Но вы не можете использовать его в диспетчере задач, потому что одно и то же событие возникает, когда любая служба запускается и останавливается. (Кроме того, событие не будет запущено, если служба уже запущена при подключении устройства.)

1
Snark

У USB Safely Remove есть такая функция: он может запускать программу при подключении USB-устройства.

Другая функция безопасного удаления USB, которая отличает его от аналогичного программного обеспечения, запускает любые приложения не только после подключения устройства, но и перед его удалением. Функция автозапуска позволяет настроить резервное копирование данных перед отсоединением съемного жесткого диска, запустить Total Commander с содержимым перьевого диска, автоматически отключить зашифрованный диск TrueCrypt перед отключением USB-носителя и т. Д.

альтернативный текст

0
Wim ten Brink

Я не думаю, что планировщик задач будет правильным инструментом. Вам нужно что-то, что будет отвечать каждый раз, когда добавляется новое USB-устройство. Для этого потребуется специальное приложение, которое может обнаруживать новые USB-устройства, и, таким образом, оно заменит функцию автозапуска Windows.

Да, такое приложение возможно. Это было бы непросто.

Использование планировщика задач означает, что вы просто собираетесь запускать автозапуск снова и снова, снова и снова, снова и снова, снова и снова, снова и снова, снова и снова, снова и снова, снова и снова, снова и снова, снова и снова, снова и снова, снова и снова, снова и снова, снова и снова ( Снова получишь картинку) Вам понадобится механизм, предотвращающий использование автозапуска дважды. И вам нужен механизм, который определяет, доступен ли автозапуск или нет, иначе вы получите постоянные сообщения об ошибках. Это все равно что ударить молотком по стене, надеясь, что между ними есть гвоздь. Планировщик не знает, когда начинать, а когда останавливаться.