У мене виникло те саме питання, що і у вас, і я розробив щось із силовою оболонкою (вбудований в сценарій вікон), використовуючи методики із блогу Scripting Guy Blog тут і тут . Сценарій працює безперервно як фоновий процес, який можна запустити при вході в систему з планувальником завдань. Сценарій буде повідомлено щоразу, коли підключено новий диск, а потім зробіть щось (тут ви налаштуєте сценарій, а не завдання). Оскільки воно в основному призупинено під час очікування наступного підключеного накопичувача, ви не повинні знаходити, що він забирає багато ресурсів. Тут я йду:
1) Запустіть ISE Powershell, який можна знайти у вашому меню запуску в розділі Аксесуари / 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 з назвою "Дзеркало" встановлений як Z: диск. Ви можете просто використовувати, if ($driveLabel -eq 'MyDiskLabel')
якщо вам не було байдуже лист.
start-process "Z:\sync.bat"
Шлях будь-якого завдання, яке ви хочете виконати. У своєму прикладі я створив пакетний файл на своєму накопичувачі USB, який запускає 3-4 командних рядка завдань резервного копіювання.
4) Коли ви закінчите, збережіть сценарій кудись (розширення .ps1
), а потім перейдіть до створення завдання в Планувальнику завдань, щоб ваш сценарій запускався у фоновому режимі. Моє виглядає так:
- Тригер: Увійти в систему
- Дія: запуск програми
- Програма / сценарій: повноваження
- Додати аргументи:
-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" в диспетчері завдань.
Єдиним недоліком є те, що при завантаженні комп'ютера з уже підключеним накопичувачем нічого не запуститься. (Сценарій міг би бути змінений для першої перевірки спочатку, але мені цього вистачало на сьогодні!)