حرف درایو هنگام ورود ظاهر می‌شود و سپس به‌صورت یک پوشه خالی باز می‌شود، یا با یک ضربدر قرمز و پیامی درباره منبع شبکه‌ای در دسترس‌نبودن. مجوزها معمولاً درست هستند. آنچه رخ داده این است که فرمان نگاشت در بازه‌ای اجرا شده که کلاینت VPN وجود داشته اما مسیری به سرور فایل نبوده، و Windows آن شکست را به‌عنوان وضعیت درایو ثبت کرده است. راه‌حل این است که نگاشت را چیزی که هنگام ورود رخ می‌دهد ندانیم و آن را آخرین گام یک توالی اتصال بدانیم.

چرا نگاشت بسیار زود اجرا می‌شود

اسکریپت ورود وقتی نشست آغاز می‌شود شروع می‌شود. کلاینت VPN که هنگام ورود متصل می‌شود خط زمانی خودش را روی آن اضافه می‌کند: فرایند می‌تواند در حال اجرا باشد، آداپتور مجازی می‌تواند وجود داشته باشد، و مسیر به زیرشبکه دفتر می‌تواند هنوز غایب باشد. این سه وضعیت از دید یک اسکریپت یکسان به نطر می‌رسند و تنها یکی از آن‌ها کار می‌کند.

برخی محیط‌ها با تکرار همان خط ناموفق در هر ورود پاسخ می‌دهند، که کاربری به بار می‌آورد که آموخته دو بار روی درایو کلیک کند و اسکریپتی که هرگز خودبه‌خود موفق نشده است.

خود درایو وضع را بدتر می‌کند. درایو نگاشت‌شده یک شیء نشست است، و وقتی Windows آن را در دسترس‌نبودن علامت بزند، نماد می‌تواند مدت‌ها پس از سالم شدن تونل خراب بماند. به همین دلیل نگاشت دستی کار می‌کند در حالی که اسکریپت به نطر می‌رسد کاری نمی‌کند. نشست شکست را به یاد می‌آورد، نه قصد پشت آن را.

وضعیت متصل مسیر نیست

نماد VPN در سینی سیستم گزارش می‌دهد که تونل برپاست یا نه. اما هیچ نمی‌گوید که آیا مسیری به یک سرور خاص وجود دارد، آیا DNS آن نام را به نشانی تونل تبدیل می‌کند، یا آیا دیوار آتش خود سرور شما را می‌پذیرد.

این‌ها سه شکست جدا با یک نتیجه ظاهری یکسان هستند، و مشروط کردن کار به نماد سینی آن‌ها را در یک سیگنال غیرقابل‌اعتماد ذوب می‌کند.

یک بررسی آمادگی که سروری را که واقعاً نیاز دارید نام می‌برد آن‌ها را از هم جدا می‌کند، چون تا زمانی که مسیر مشخص کار نکند شکست می‌خورد، نه تا زمانی که واسطی خود را متصل اعلام کند.

به سرور مشروط کنید، نه به کلاینت

میزبانی را انتخاب کنید که فقط از طریق تونل در دسترس است و پیش از نگاشت هر چیزی منتظر آن بمانید. قطعه زیر یک ورودی ذخیره‌شده VPN ویندوز را متصل می‌کند، سرور فایل را بررسی می‌کند و سپس درایو را نگاشت می‌کند.

@echo off
set server=fileserver.corp.example
rasdial "Office VPN" /disconnect
rasdial "Office VPN"
:wait
ping -n 1 -w 1000 %server% >nul || (
  timeout /t 5 /nobreak >nul
  goto wait
)
net use Z: \\%server%\share /persistent:no

پینگ یک کاوشگر آمادگی است، نه آزمون مجوز. اگر ICMP در شبکه شما فیلتر می‌شود، به‌جای آن سرویسی را که واقعاً استفاده می‌کنید بررسی کنید: net view \\%server% برای یک بررسی سریع، یا یک آزمون کوتاه TCP روی درگاه 445 در PowerShell. هر یک از این دو کار را به چیزی که اهمیت دارد مشروط می‌کند.

تعداد محدودی تلاش اضافه کنید. حلقه انتظار بدون سقف تونل خراب را به نشستی تبدیل می‌کند که هرگز ورود را تمام نمی‌کند، و این تماس پشتیبانی بدتری از نبودن حرف درایو است.

آن را قابل‌اجرای مجدد و آگاه به نشست کنید

آن را درون نشست خود کاربر اجرا کنید. وظیفه‌ای که به‌عنوان SYSTEM اجرا می‌شود درایو را در نشستی کاملاً متفاوت قرار می‌دهد، و کاربر واردشده هرگز نتیجه را نمی‌بیند. این به شما اسکریپتی می‌دهد که موفقیت گزارش می‌کند و میزکاری که درایویی در آن نیست.

پیش از نگاشت بررسی کنید و فقط ورودی کهنه را حذف کنید. net use Z: /delete وقتی حرف استفاده نشده باشد خطا برمی‌گرداند، و نادیده گرفتن آن خطا بی‌خطر است، نه دلیلی برای رها کردن بقیه اسکریپت. /persistent:no را نگه دارید تا تلاش ناموفق بعداً به تلاش دائمی برای اتصال مجدد تبدیل نشود.

و رمز عبور را در فایل نگذارید. rasdial می‌تواند از اعتبارنامه‌های ذخیره‌شده برای ورودی VPN دوباره استفاده کند، و اشتراک باید به‌عنوان کاربر واردشده احراز هویت شود. اگر اشتراک واقعاً اعتبارنامه متفاوتی می‌خواهد، آن‌ها را یک بار برای هر کاربر با cmdkey ثبت کنید، نه اینکه در یک فایل batch که روی اشتراک ورود قرار دارد جاسازی کنید. هر کس بتواند آن اشتراک را بخواند می‌تواند رمز را هم بخواند، و این یک راحتی را به یک حادثه تبدیل می‌کند.

اجرای مجدد کل اسکریپت باید بی‌ضرر باشد، چون دقیقاً همین اتفاق خواهد افتاد. کاربران دوباره متصل می‌شوند، لپ‌تاپ‌ها بیدار می‌شوند، و همان مسیر کد با وضعیت شروع متفاوتی دوباره اجرا می‌شود.

به‌قدری ثبت کنید که ثابت شود کدام نیمه دیر رسیده است

زمان‌مهر، نتیجه بررسی آمادگی و کد خروج نگاشت را در فایلی زیر نمایه کاربر بنویسید. وقتی گزارش بعدی درباره درایو گمشده برسد، آن گزارش تنها پرسش مهم را پاسخ می‌دهد: تونل دیر رسید، یا اشتراک امتناع کرد؟

بدون آن، هر تکرار از صفر بررسی می‌شود و نتیجه معمول تغییری در مجوزهاست که چیزی را درست نمی‌کند.

توالی را یک بار از راه‌اندازی سرد و یک بار از خواب آزمایش کنید. حالت بیدار شدن جایی است که ترتیب بیشتر از همه می‌شکند، چون نشست پیش از شبکه از سر گرفته می‌شود و اسکریپت ماشینی را می‌بیند که ساعت‌ها پیش وارد شده است.

مقالات مرتبط