У меня был такой же вопрос, как и у вас, и я кое-что проработал с 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) " 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) Вам нужно изменить приведенный выше скрипт, чтобы указать скрипту, какой диск искать и что выполнять. Две строки для изменения:
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» в диспетчере задач.
Единственным недостатком является то, что ничего не запустится, когда вы загрузите свой компьютер с уже подключенным диском. (Хотя сценарий может быть изменен, чтобы сначала выполнить первую проверку, но на сегодня хватит!)