मेरे पास एक पावरशेल स्क्रिप्ट है जो एक एसिंक्रोनस टाइमर इवेंट (पृष्ठभूमि प्रक्रिया) का उपयोग करती है ताकि उचित कार्रवाई करने से पहले एक निश्चित स्थिति कितनी देर हो रही हो। जब मैं PowerGUI के अंदर स्क्रिप्ट चलाता हूं तो यह पूरी तरह से ठीक काम कर रहा है, लेकिन जब मैं डॉट-सोर्सिंग का उपयोग करके स्क्रिप्ट चलाता हूं या इसे बैच फ़ाइल के माध्यम से चलाता हूं तो टाइमर इवेंट क्रियाएं फायरिंग नहीं होती हैं।पावरशेल एसिंक्रोनस टाइमर इवेंट परीक्षण कंसोल के बाहर काम नहीं कर रहे हैं
यहां एक कोड स्निपेट है।
$timer = New-Object System.Timers.Timer
$timer.Interval = 10000
$timer.AutoReset = $true
$timeout = 0
$action = {
"timeout: $timeout" | Add-Content $loglocation
<more stuff here>
$timer.stop()
}
$start = Register-ObjectEvent -InputObject $timer -SourceIdentifier TimerElapsed -EventName Elapsed -Action $action
$timer.start()
while(1)
{
<do some testing here>
}
तो जब यह काम करता है, तो मुझे लॉग में लिखे गए प्रत्येक 10 सेकंड में "टाइमआउट: एक्सएक्स" आउटपुट दिखाई देगा। लेकिन यह केवल तब होता है जब संपादक के अंदर चलाया जाता है। जब मैं इसे बैच फ़ाइल के माध्यम से चलाता हूं तो कुछ भी नहीं होता है (हालांकि मैं पुष्टि कर सकता हूं कि जबकि लूप ठीक प्रसंस्करण कर रहा है)।
तो मेरा सवाल यह है कि जब मैं PowerGUI बनाम कमांड लाइन के माध्यम से स्क्रिप्ट चला रहा हूं तो मेरा अनुभव अलग क्यों है? मेरा विचार है कि स्कोपिंग या समांतर थ्रेड के साथ कोई समस्या हो सकती है लेकिन मुझे बिल्कुल यकीन नहीं है कि समस्या क्या है। इसके अलावा मैं इन घटनाओं को किसी भी कार्य या लूप के अंदर नहीं चला रहा हूं।