Windows VPN चालू रखें: डिस्कनेक्ट घटना पर rasdial ट्रिगर करें
RasClient 20226 और 20227 ड्रॉप चिह्नित करते हैं; 631 का अर्थ है कि किसी व्यक्ति ने ऐसा किया। पहले दो पर rasdial ट्रिगर करें, एक क्रेडेंशियल रखें, और एग्ज़िट कोड पढ़ें।
Windows अपने VPN क्लाइंट के लिए कोई पुनः डायल नीति नहीं देता, इसलिए आधी रात को टूटा कनेक्शन सुबह के नाश्ते तक भी बंद रहता है। जो निर्धारित कार्य डिस्कनेक्ट पर नज़र रखता है और rasdial चलाता है, वह तीसरे पक्ष के क्लाइंट के बिना यह खाली जगह भर देता है। कार्य ऑपरेटर की तरह व्यवहार करे या लूप की तरह, यह तीन ब्यौरों पर आता है: वह किन घटनाओं से मेल खाता है, कौन-सा क्रेडेंशियल देख सकता है, और परिणाम के साथ क्या करता है। तीनों में से कोई भी कठिन नहीं है, और इनमें से कोई एक छूट जाना ही ऐसा कार्य बनाता है जो हमेशा डायल करता रहेगा।
टाइमर गलत ट्रिगर क्यों है
टाइमर टनल बंद हो या न हो, अपने ही शेड्यूल पर डायल करता है। इससे ऐसे प्रयास बनते हैं जिनकी किसी को ज़रूरत नहीं थी, और काम के सत्र के दौरान किया गया प्रयास उसे बाधित कर सकता है। घटना ट्रिगर केवल तब सक्रिय होता है जब कनेक्शन की स्थिति बदलती है, जो सस्ता है और समझना आसान है। घटना कारण भी साथ लाती है, और कारण ही नेटवर्क विफलता को जानबूझकर डिस्कनेक्ट करने वाले व्यक्ति से अलग करता है।
यही अंतर उपयोगी कार्य और हर शाम उपयोगकर्ता से लड़ने वाले कार्य के बीच का फ़र्क़ है। यह वही हिस्सा है जो आम तौर पर ऐसी विधियों में छूट जाता है जो केवल क्रिया का वर्णन करती हैं।
घटनाओं का युग्म, और किसे दबाना है
Remote Access Service क्लाइंट RasClient प्रदाता के अंतर्गत Application लॉग में जीवनचक्र के रिकॉर्ड लिखता है। 20226 समाप्त हुए कनेक्शन को चिह्नित करता है, और 20227 विफल प्रयास को, इसलिए दोनों में से कोई भी नए डायल को न्यायोचित ठहरा सकता है। कार्य में बाकी सब कुछ इन दो पहचानकर्ताओं के ठीक मेल पर निर्भर है। ये वर्षों से स्थिर हैं, इसलिए इन पर बनी विधियाँ अब भी प्रचलन में हैं, पर जो बिल्ड प्रदाता या पहचानकर्ताओं का नाम बदल देता है, वह क्वेरी को कुछ भी न लौटाने देता है। हर फ़ीचर अपडेट के बाद प्रमाण का चरण दोबारा चलाएँ, बजाय इसके कि कार्य के बंद होने की प्रतीक्षा करें।
एक समाप्ति को बाहर रखना है। त्रुटि 631 का अर्थ है कि उपयोगकर्ता ने पोर्ट डिस्कनेक्ट किया, और उस क्षण नया डायल अभी-अभी जानबूझकर नेटवर्क बदलने वाले व्यक्ति से लड़ता है। बहिष्करण को स्क्रिप्ट में नहीं, ट्रिगर फ़िल्टर में रखें, ताकि कार्य शुरू ही न हो। यह केवल एक घटना आईडी पर लागू होना चाहिए, क्योंकि EventData विधेय केवल तब मेल खाता है जब नामित तत्व मौजूद हो, और साझा खंड दूसरी आईडी की हर घटना को चुपचाप गिरा देता। फ़िल्टर लिखने से पहले किसी वास्तविक रिकॉर्ड से तत्व का नाम पढ़ें:
Get-WinEvent -LogName Application -MaxEvents 5 -FilterXPath "*[System[Provider[@Name='RasClient'] and EventID=20226]]" | Select-Object -First 1 -ExpandProperty ToXml
XML उस रिकॉर्ड में Data के ठीक नाम दिखाता है। ErrorCode सामान्य वर्तनी है, और कुछ और इस्तेमाल करने वाले रिकॉर्ड के लिए नीचे के फ़िल्टर में वह नाम बदलना होगा।
<QueryList><Query Id="0" Path="Application"><Select Path="Application">*[System[Provider[@Name='RasClient'] and (EventID=20226 or EventID=20227)]] and (EventData[Data[@Name='ErrorCode'] != '631'] or System[EventID=20227])</Select></Query></QueryList>
इसे ट्रिगर के कस्टम फ़िल्टर में चिपकाएँ, और ट्रिगर बनने से पहले इसे क्वेरी के रूप में सिद्ध करें। वही XPath PowerShell से जीवंत लॉग के विरुद्ध चलता है, जो यह देखने का सस्ता तरीका है कि यह किससे मेल खाता है, जबकि कार्य इतिहास अभी शामिल नहीं है।
Get-WinEvent -LogName Application -MaxEvents 40 -FilterXPath "*[System[Provider[@Name='RasClient'] and (EventID=20226 or EventID=20227)]] and (EventData[Data[@Name='ErrorCode'] != '631'] or System[EventID=20227])" | Select-Object TimeCreated,Id,Message
चुपचाप किसी से मेल न खाने वाला ट्रिगर ठीक वैसा ही दिखता है जैसा चलकर विफल होने वाला कार्य। दोनों "ऑटोमेशन काम नहीं करता" के रूप में दिखते हैं, और कोई नहीं बताता कि कौन-सा आधा हिस्सा छूटा है। पहले क्वेरी का आउटपुट जाँचें, क्योंकि यह एक ही चरण में दोनों स्थितियों को अलग करता है।
डायल विफल होता है क्योंकि पासवर्ड टाइप करने कोई नहीं है
क्रिया कनेक्शन के नाम के साथ rasdial चलाती है। जब प्रोफ़ाइल में कोई कैश किया हुआ क्रेडेंशियल नहीं होता, तो डायल तुरंत विफल हो जाता है क्योंकि संकेत का उत्तर देने कोई नहीं है। सही तरीके से ट्रिगर हुए कार्य के कुछ भी दिखाई न देने का यही सबसे आम कारण है, इसलिए ट्रिगर छूने से पहले इसे जाँचें। कमांड प्रॉम्प्ट से हाथ से डायल करना क्रेडेंशियल की समस्या को शेड्यूलिंग की समस्या से अलग करता है।
क्रेडेंशियल को एक बार उसी खाते के अंतर्गत सहेजें जिसके अंतर्गत कार्य चलेगा, और उस खाते को डिज़ाइन का हिस्सा बनाएँ। SYSTEM के रूप में चलने वाला कार्य आपके इंटरैक्टिव खाते द्वारा सहेजा गया क्रेडेंशियल नहीं पढ़ सकता, और न ही किसी और के रूप में चलने वाला कार्य। नाम भी प्रोफ़ाइल से ठीक मेल खाना चाहिए, उपयोगकर्ता फ़ील्ड में किसी भी डोमेन उपसर्ग सहित।
rasdial
rasdial "Office VPN"
(Start-Process rasdial -ArgumentList '"Office VPN"' -Wait -PassThru -NoNewWindow).ExitCode
पहला कमांड उन नामों की सूची देता है जिन्हें Windows जानता है। दूसरा सहेजे गए क्रेडेंशियल का उपयोग करके नाम से डायल करता है, और तीसरा वह रूप है जो PowerShell क्रिया को इस्तेमाल करना चाहिए, क्योंकि यह प्रतीक्षा करता है और ऐसा मान लौटाता है जिसे कार्य दर्ज कर सके।
विंडो के बजाय एग्ज़िट कोड पढ़ें
बिना प्रतीक्षा किए प्रक्रिया शुरू करने वाला कार्य प्रक्रिया के मौजूद होते ही सफलता की सूचना देता है। ऐसे डायल के लिए जो एक सेकंड बाद विफल हो सकता है, यह फैसला बेकार है। एग्ज़िट कोड की प्रतीक्षा करना क्रिया को वास्तविक परिणाम में बदल देता है। कार्य इतिहास अकेले केवल यह दिखाता है कि प्रक्रिया शुरू हुई, कभी यह नहीं कि टनल ऊपर आई।
हर बार चलने पर समय-चिह्न के साथ मान लॉग करें। आउटेज के बाद एक विफलता सामान्य है, जबकि एक ही कोड के साथ लगातार तीन विफलताएँ नेटवर्क की ओर नहीं, क्रेडेंशियल या प्रोफ़ाइल की ओर इशारा करती हैं। यही पैटर्न इतिहास को पढ़ने योग्य बनाता है।
बीमा के रूप में एक छोटा दोहराव अंतराल जोड़ें, और स्पष्ट कहें कि यह घटना ट्रिगर के साथ कैसे काम करता है। पाँच मिनट तक हर मिनट दोहराव दूसरा प्रयास देता है जब इंटरनेट टनल के साथ लौटा, और सेटिंग्स के अंतर्गत, "यदि कार्य पहले से चल रहा है, तो निम्नलिखित नियम लागू होता है", कार्य "नई इंस्टेंस प्रारंभ न करें" चाहता है ताकि दोहराव किसी चल रहे डायल को ओवरलैप न करे। उस सेटिंग के बिना दो rasdial प्रक्रियाएँ एक ही पोर्ट के लिए होड़ कर सकती हैं और दूसरी बिना किसी उपयोगी कारण के विफल हो जाती है।
रिकवरी पथ सिद्ध करें
दोनों दिशाओं को जानबूझकर परखें। हाथ से डिस्कनेक्ट करें और पुष्टि करें कि कोई पुनः डायल नहीं होता, फिर नेटवर्क अडैप्टर अक्षम करें और पुष्टि करें कि लिंक लौटने पर कार्य सक्रिय होता है। ये दो परीक्षण दमन नियम और वास्तविक विफलता स्थिति को कवर करते हैं, और कोई और नहीं करता।
इसके बाद कनेक्शन आइकन के बजाय कार्य इतिहास पढ़ें। इतिहास दर्ज करता है कि कार्य कब चला, किस खाते का उपयोग किया और क्रिया ने क्या लौटाया, और अगले महीने वही मशीन फिर टूटने पर यही प्रमाण चाहिए होता है।