
я узнал чтоWindows 7 не поддерживает автозапуск на USB-накопителях.
Можно ли обойти это (безопасным способом), настроив задачу с помощью Task Scheduler, которая срабатывает при вставке USB-накопителя? На первый взгляд я не смог найти никаких связанных событий с Event Viewer.
решение1
У меня был тот же вопрос, что и у вас, и я кое-что придумал с помощью PowerShell (встроенные скрипты Windows), используя приемы из блога Scripting Guy.здесьиздесь. Скрипт работает непрерывно как фоновый процесс, который вы можете запустить при входе в систему с помощью планировщика задач. Скрипт будет уведомлен всякий раз, когда подключается новый диск, а затем что-то сделает (здесь вы настраиваете скрипт, а не задачу). Поскольку он в основном приостанавливается в ожидании следующего подключенного диска, вы не должны обнаружить, что он потребляет много ресурсов. Вот я:
1) Запустите Powershell ISE, который можно найти в меню «Пуск» в разделе «Стандартные»/«Windows Powershell».
2) Скопируйте и вставьте следующее в Powershell.
#Требуется -версия 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 если ($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 # Выполнить процесс, если диск соответствует указанным условиям если ($driveLetter -eq 'Z:' -и $driveLabel -eq 'Зеркало') { write-host (get-date -format s) "Запуск задачи через 3 секунды..." старт-сон -секунды 3 запустить процесс "Z:\sync.bat" } } Remove-Event -SourceIdentifier volumeChange } while (1-eq1) #Цикл до следующего события Unregister-Event -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» в диспетчере задач.
решение2
Нет. Планировщик заданий использовать нельзя.
Единственное регистрируемое событие, которое срабатывает при подключении USB-устройства, — это запуск службы «Перечисление портативных устройств». Но вы не можете использовать ее в диспетчере задач, поскольку то же самое событие срабатывает прилюбойслужба запущенаиостановлено. (Кроме того, событие не сработает, если служба уже запущена при подключении устройства.)
решение3
USB-устройство безопасного извлеченияимеет такую функцию: он может запускать программу при подключении USB-устройства.
Еще одна функция USB Safely Remove, отличающая ее от аналогичного ПО, — это запуск любых приложений не только после подключения устройства, но и до его извлечения. Функция автозапуска позволяет настроить резервное копирование данных перед отключением съемного жесткого диска, запустить Total Commander с содержимым флешки, автоматически размонтировать зашифрованный диск TrueCrypt перед отключением USB-носителя и т. д.
решение4
Я не думаю, что планировщик задач будет подходящим инструментом. Вам нужно что-то, что будет реагировать каждый раз, когда добавляется новое USB-устройство. Для этого потребуется специализированное приложение, которое может обнаруживать новые USB-устройства, и, таким образом, оно заменит функцию автозапуска Windows.
Да, такое приложение возможно. Хотя его создание было бы сложной задачей.
Использование планировщика задач означает, что вы просто будете запускать автозапуск снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова и снова (ну, вы поняли) снова. Вам понадобится механизм, чтобы предотвратить повторное использование автозапуска. И вам понадобится механизм, который определит, доступен ли автозапуск или нет, иначе вы получите вечные сообщения об ошибках. Это как бить молотком по стене, надеясь, что между ними будет гвоздь. Планировщик не будет знать, когда начинать и когда останавливаться.