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

কমান্ডটি আসলে কী জানায়

ইনস্টল করা কমান্ড-লাইন টুল যে নেটিভ Windows প্রোফাইল বোঝে, তার জন্য rasdial.exe একটি নামযুক্ত এন্ট্রি ডায়াল করে এবং প্রসেসের exit কোড ফেরত দেয়। সেই কোডটি ডায়াল প্রচেষ্টা বর্ণনা করে: শূন্য মানে ওই প্রোফাইলের জন্য সংযোগ স্থাপিত হয়েছে, আর অশূন্য মানে কোডটি যে পর্যায় চিহ্নিত করে সেখানে ব্যর্থ হয়েছে। এটি একটি স্তরের ফলাফল হিসেবে পড়ুন, কাজের ফলাফল হিসেবে নয়।

ফলাফলটি ঠিকানা বণ্টন, ব্যক্তিগত DNS, যোগ করা রুট বা নির্দিষ্ট সার্ভারে পৌঁছানোর অনুমতি সম্পর্কে কিছুই বলে না। এসবই সফল ডায়ালের পরে ঘটে, এবং এর যেকোনোটি তখনও ভুল হতে পারে। এই ফাঁকটাই কারণ সংযুক্ত আইকন আর ব্যর্থ কপি এত ঘন ঘন একসাথে দেখা যায়।

আর কিছু চলার আগেই ফলাফল ধরে রাখুন

প্রথমে নিশ্চিত করুন যে প্রোফাইলটি কাজ চালাবে সেই অ্যাকাউন্টের জন্য আছে, শুধু যে অ্যাকাউন্ট দিয়ে আপনি পরীক্ষা করছেন তার জন্য নয়:

Get-VpnConnection -Name "Contoso-Office"
Get-VpnConnection -Name "Contoso-Office" -AllUserConnection

তারপর ডায়াল করুন এবং সঙ্গে সঙ্গে কোড পড়ুন। PowerShell নেটিভ ফলাফল $LASTEXITCODE-এ রাখে কেবল পরবর্তী বাহ্যিক কমান্ড চালানো পর্যন্ত, তাই ডায়াল ও যাচাইয়ের মধ্যে একটি এলোমেলো ping আপনি যে মানটি পড়তে চেয়েছিলেন তা নষ্ট করে দেয়। আগে এটি নিজের ভেরিয়েবলে বসান, তারপর সিদ্ধান্ত নিন কী করবেন।

& rasdial.exe "Contoso-Office"
$dial = $LASTEXITCODE
if ($dial -ne 0) { throw "rasdial failed with $dial" }

কোডটি অসংবেদনশীল ত্রুটি পাঠের সাথে লগ করুন, কারণ অনুপস্থিত এন্ট্রি, প্রত্যাখ্যাত শংসাপত্র এবং সময়সীমা ভিন্ন প্রতিক্রিয়া দাবি করে। সারণিটি সাধারণ ফলাফলগুলিকে পরবর্তী পদক্ষেপের সাথে যুক্ত করে।

ResultWhat it indicatesNext step
0The dial completedProbe the resource, do not start writing yet
691The credential or authentication method was rejectedFix the account or method, do not retry in a loop
623The named entry was not foundFix the profile name or its scope
Other non-zeroTransport, timeout or adapter failureRead the message, then check the path

প্রস্তুতি মানে রিসোর্স, টানেল নয়

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

Test-NetConnection -ComputerName files.contoso.example -Port 445

প্রচেষ্টার সংখ্যা সীমিত করুন এবং কোন পর্যায়ে ব্যর্থ হয়েছে তা লিখে রাখুন। প্রত্যাখ্যাত শংসাপত্র স্ক্রিপ্ট থামানো উচিত, পুনরায় চেষ্টার লুপ খাওয়ানো নয়; যে DNS নাম এখনও আসেনি তা কয়েকটি সংক্ষিপ্ত পুনরায় চেষ্টার যোগ্য; যে পোর্ট কখনও খোলে না তা ক্লায়েন্টের উপরের রাউটিং বা নীতির সমস্যা।

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

প্রোফাইলটি কাজ চালানো অ্যাকাউন্টে সীমিত করুন

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

যদি স্থাপনার জন্য ব্রাউজার প্রম্পট, স্মার্ট-কার্ড স্পর্শ বা MFA অনুমোদন প্রয়োজন হয়, সেই মিথস্ক্রিয়া নকশার অংশ এবং কীস্ট্রোক অনুকরণ করে স্বয়ংক্রিয় করা যায় না। সেই ক্ষেত্রে সমর্থিত ক্লায়েন্ট ব্যবহার করুন এবং মানুষের ধাপটি ঘটতে দিন।

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

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