Seninle aynı soruyu sordum ve burada ve burada Scripting Guy Blog'undaki teknikleri kullanarak powershell (pencerelerde yerleşik komut dosyası) ile bir şeyler çözdüm . Betik, görev zamanlayıcı ile sistem oturum açma sırasında başlayabileceğiniz bir arka plan işlemi olarak sürekli çalışır. Her yeni bir sürücü takıldığında komut dosyası size bildirilir ve ardından bir şey yapılır (burada görev yerine komut dosyasını yapılandırırsınız). Bir sonraki takılı sürücüyü beklerken temel olarak duraklatılmış olduğundan, fazla kaynak harcayacağını görmemelisiniz. İşte gidiyorum:
1) Başlat menüsünde Donatılar / Windows Powershell altında bulunan Powershell ISE'yi başlatın. 2) Aşağıdakileri Powershell'e kopyalayıp yapıştırın:
#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) Komut dosyasına hangi sürücünün aranacağını ve nelerin yürütüleceğini söylemek için yukarıdaki komut dosyasını değiştirmeniz gerekir. Değiştirilecek iki satır:
if ($driveLetter -eq 'Z:' -and $driveLabel -eq 'Mirror')
'Mirror' isimli usb sabit sürücüm Z: sürücüsü olarak ayarlandı. Sadece kullanabilirsiniz if ($driveLabel -eq 'MyDiskLabel')
mektubun umursamadığını eğer.
start-process "Z:\sync.bat"
Yapmak istediğiniz işin yolu. Örneğimde, USB sürücümde 3-4 yedekleme görevi komut satırı başlatan bir toplu iş dosyası oluşturdum.
4) İşiniz bittiğinde, komut dosyanızı bir yere kaydedin (uzantı .ps1
), daha sonra komut dosyanızın arka planda çalışmasını sağlamak için Görev Zamanlayıcı'da bir görev oluşturun. Benimki şuna benziyor:
- Tetik: Oturum açıldığında
- Eylem: Bir program başlatın
- Program / script: powershell
- Argüman ekle:
-ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1"
5) Voilà!
6) Ekstra şeyler:
Komut dosyası pencerenizin gizlenmesini istiyorsanız, şu argümanları kullanın:
- Argüman ekle:
-WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1"
Komut dosyası iletilerini bir günlük dosyasına (komut dosyası her başlatıldığında, yani oturum açıldığında üzerine yazılan) yazdırmak istiyorsanız, aşağıdaki görev işlemini kullanın:
- Program / script: cmd
- Argümanları ekle:
/c powershell -WindowStyle Hidden -ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1" > "D:\Stuff\script
log.txt "
Çalışan gizli betiği sonlandırmak istediğinizde, Görev Yöneticisi'nde "Powershell" işlemini sonlandırabilirsiniz.
Tek dezavantajı, sürücüyü önceden takılıyken bilgisayarınızı başlattığınızda hiçbir şeyin çalışmadığıdır.