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 প্রসেস একই পোর্টের জন্য প্রতিযোগিতা করতে পারে এবং দ্বিতীয়টি কোনো কাজের কারণে ব্যর্থ হয়।

পুনরুদ্ধারের পথ প্রমাণ করুন

উভয় দিক ইচ্ছাকৃতভাবে পরীক্ষা করুন। হাতে সংযোগ বিচ্ছিন্ন করুন এবং নিশ্চিত করুন যে কোনো পুনরায় ডায়াল হয় না, তারপর নেটওয়ার্ক অ্যাডাপ্টার নিষ্ক্রিয় করুন এবং নিশ্চিত করুন যে লিংক ফিরে এলে টাস্কটি চলে। এই দুটি পরীক্ষা দমন নিয়ম এবং বাস্তব ব্যর্থতার ক্ষেত্র কভার করে, আর অন্য কিছু তা করে না।

এর পরে সংযোগ আইকনের বদলে টাস্কের ইতিহাস পড়ুন। ইতিহাস রেকর্ড করে টাস্ক কখন চলেছিল, কোন অ্যাকাউন্ট ব্যবহার করেছিল এবং অ্যাকশন কী ফেরত দিয়েছিল, আর একই মেশিন পরের মাসে আবার ড্রপ করলে সেই প্রমাণই দরকার হয়।

সম্পর্কিত নিবন্ধ