मेरे पास आपके जैसा ही प्रश्न था, और यहां और यहां स्क्रिप्टिंग गाइ ब्लॉग की तकनीकों का उपयोग करते हुए पावरशेल (विंडोज़ में निर्मित स्क्रिप्टिंग) के साथ कुछ काम किया । स्क्रिप्ट एक पृष्ठभूमि प्रक्रिया के रूप में लगातार चलती है, जिसे आप कार्य शेड्यूलर के साथ सिस्टम लॉगऑन पर शुरू कर सकते हैं। जब भी कोई नया ड्राइव प्लग किया जाता है, तब स्क्रिप्ट को सूचित किया जाएगा और फिर कुछ किया जाएगा (यहां आप कार्य के बजाय स्क्रिप्ट को कॉन्फ़िगर करते हैं)। चूंकि यह मूल रूप से अगले प्लग किए गए ड्राइव की प्रतीक्षा करते समय रोका जाता है, इसलिए आपको यह नहीं पता होना चाहिए कि यह बहुत अधिक संसाधन लेता है। लो मैं चला:
1) पॉवर्सशेल ISE शुरू करें, जो एक्सेसरीज / विंडोज पॉवर्सशेल के तहत आपके स्टार्ट मेनू में पाया जा सकता है। 2) पॉवर्सशेल में निम्नलिखित को कॉपी पेस्ट करें:
#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"
आप जो भी कार्य करना चाहते हैं उसका पथ। मेरे उदाहरण में, मैंने अपने यूएसबी ड्राइव पर एक बैच फ़ाइल बनाई है जो 3-4 बैकअप कार्य कमांड लाइन शुरू करती है।
4) जब आप काम कर रहे हों .ps1
, तो अपनी स्क्रिप्ट को कहीं और सेव करें (विस्तार ), फिर टास्क शेड्यूलर में एक टास्क बनाएं ताकि आपकी स्क्रिप्ट बैकग्राउंड में चले। मेरा ऐसा दिखता है:
- ट्रिगर: लॉग ऑन पर
- क्रिया: एक कार्यक्रम शुरू करें
- कार्यक्रम / स्क्रिप्ट: शक्तियां
- तर्क जोड़ें:
-ExecutionPolicy Unrestricted -File "D:\Stuff\Backup script.ps1"
5) Voilà!
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 "
कभी भी आप छिपी हुई स्क्रिप्ट को समाप्त करना चाहते हैं, आप टास्क मैनेजर में "पॉवर्सशेल" प्रक्रिया को समाप्त कर सकते हैं।
केवल नकारात्मक पक्ष यह है कि जब आप पहले से प्लग किए गए ड्राइव के साथ अपने कंप्यूटर को बूट करते हैं तो कुछ भी नहीं चलेगा। (स्क्रिप्ट को शुरू में पहला चेक करने के लिए बदला जा सकता है, लेकिन आज के लिए मेरे पास पर्याप्त है!)