У меня был такой же вопрос, как и у вас, и я кое-что проработал с 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» в диспетчере задач.