Страницы

Поиск по вопросам

понедельник, 8 октября 2018 г.

Настройка планировщика на подключение флешки

Надо сделать, чтобы при подключении определенной флешки запускалась программа. В интернете пишут, что можно через планировщик, но никто не пишет, как именно.


Ответ

Я слегка слукавил, без планировщика не обойтись, хотя, наверное, можно и через автозагрузку решить всё это.
Я для одного пожилого сотрудника когда-то использовал вот такой скрипт, который срабатывал, если вставлялась флэшка, автоопределяемая с буквой T и меткой "BP_flahka". Если буква диска не важна, то вместо if ($driveLetter -eq 'T:' -and $driveLabel -eq 'BP_flashka') можно использовать просто if ($driveLabel -eq 'ТутМеткаВашейФлэшки'). Код скрипта:
#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 # Запустить, если буква диска и метка совпали с нужными значениями if ($driveLetter -eq 'T:' -and $driveLabel -eq 'BP_flashka') { write-host (get-date -format s) " Starting task in 3 seconds..." start-sleep -seconds 3 start-process "E:\sync.bat" } } Remove-Event -SourceIdentifier volumeChange } while (1-eq1) #Идём в цикле дальше Unregister-Event -SourceIdentifier volumeChange
Дальше всё просто. В планировщике создаём новое задание, с такими параметрами: Триггер: At log on Действие: Start a program Program/script: powershell Аргументы: -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "Диск:\Путь\имя файла со скриптом.ps1"
Update 1.
Проверок для вставляемого хранилища можно устроить массу. Например:
# узнаем тип файловой системы флэшки $fileSystem = ([wmi]"Win32_LogicalDisk='$driveLetter'").FileSystem # проверяем, сколько свободного места осталось (в байтах) на флэшке $freeSpace = ([wmi]"Win32_LogicalDisk='$driveLetter'").FreeSpace # или общий размер всей флэшки: $size = ([wmi]"Win32_LogicalDisk='$driveLetter'").Size # и так далее, а затем просто проверяем нужный нам параметр, например: if ($fileSystem -eq 'NTFS') { # в этом случае бэкап можно делать одним большим файлом } # и так далее
Update 2. Работать будет, начиная с Windows Vista/Server 2008

Комментариев нет:

Отправить комментарий