Miałem to samo pytanie co ty i opracowałem coś z PowerShell (wbudowane skrypty systemu Windows), używając technik z blogu Scripting Guy tutaj i tutaj . Skrypt działa nieprzerwanie jako proces w tle, który można rozpocząć przy logowaniu systemowym za pomocą harmonogramu zadań. Skrypt zostanie powiadomiony za każdym razem, gdy nowy dysk zostanie podłączony, a następnie coś zrobi (tutaj konfigurujesz skrypt, a nie zadanie). Ponieważ jest zasadniczo wstrzymany podczas oczekiwania na następny podłączony dysk, nie powinieneś uważać, że zajmuje dużo zasobów. Teraz ja:
1) Uruchom program Powershell ISE, który można znaleźć w menu Start w obszarze Akcesoria / Windows Powershell. 2) Skopiuj następujące elementy do programu 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) Musisz zmodyfikować powyższy skrypt, aby wskazać skryptowi, którego dysku szukać i co wykonać. Dwie linie do zmiany to:
if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')
Mój dysk twardy USB o nazwie „Mirror” jest ustawiony jako dysk Z:. Możesz użyć, if ($driveLabel -eq 'MyDiskLabel')
jeśli nie obchodzi cię list.
start-process "Z:\sync.bat"
Ścieżka do dowolnego zadania, które chcesz wykonać. W moim przykładzie utworzyłem plik wsadowy na dysku USB, który uruchamia 3-4 wiersze poleceń zadań tworzenia kopii zapasowych.
4) Po zakończeniu zapisz gdzieś skrypt (rozszerzenie .ps1
), a następnie utwórz zadanie w Harmonogramie zadań, aby skrypt działał w tle. Mój wygląda następująco:
- Wyzwalacz: przy logowaniu
- Działanie: Uruchom program
- Program / skrypt: powershell
- Dodaj argumenty:
-ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1"
5) Voilà!
6) Dodatkowe rzeczy:
Jeśli chcesz ukryć okno skryptu, użyj następujących argumentów:
- Dodaj argumenty:
-WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1"
Jeśli chcesz wyprowadzić komunikaty skryptu do pliku dziennika (który jest nadpisywany przy każdym uruchomieniu skryptu, tj. Przy logowaniu), użyj następującej czynności zadania:
- Program / skrypt: cmd
- Dodaj argumenty:
/c powershell -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1" > "D:\Stuff\script
log.txt ”
Za każdym razem, gdy chcesz zakończyć działający ukryty skrypt, możesz zakończyć proces „Powershell” w Menedżerze zadań.
Jedynym minusem jest to, że nic się nie uruchomi, gdy uruchomisz komputer z już podłączonym napędem. (Skrypt można zmienić, aby wykonać pierwszą kontrolę początkowo, ale mam dość na dziś!)