Add-VpnConnection: لماذا يتلف المفتاح المشترك مسبقا ويبقى العنوان القديم
يوسع PowerShell المفتاح المشترك مسبقا بين علامتي اقتباس مزدوجتين قبل أن يخزنه الأمر، ويحتفظ النفق العامل بالعنوان القديم حتى تعيد الاتصال.
ملف تعريف VPN في Windows هو مدخل في دفتر هاتف، وPowerShell إحدى طرق تحرير ذلك المدخل. ينتج عن هذا التمييز فشلان: مفتاح مشترك مسبقا يصل إلى الخادم تالفا، وعنوان خادم يبدو محدثا لكنه ليس العنوان الذي سيتصل به النفق التالي. يسهل رؤية كليهما حين تتعامل مع الملف كحالة مخزنة لا كأمر قمت بتشغيله. يسير الشرح بترتيب حدوث التحريرات: الإنشاء، التغيير، النطاق، القراءة المرتجعة.
أنشئ الملف بمفتاح حرفي
يقبل Add-VpnConnection المفتاح المشترك مسبقا لبروتوكول L2TP عبر -L2tpPsk. يعالج PowerShell السلسلة قبل أن يستلمها الأمر، وداخل علامات الاقتباس المزدوجة تبدأ علامة الدولار مرجعا لمتغير بينما تبدأ علامة الاقتباس الخلفي محرف هروب. المفتاح الذي يحتوي على أي منهما يصل أقصر أو بمحرف مختلف، وينشأ الملف بنجاح مع سر خاطئ.
ثم يظهر الفشل عند مصادقة IPsec، حيث يرفض النفق أن يقوم. لهذا يبلغ عن خطأ الاقتباس غالبا كمشكلة من جهة الخادم: الملف موجود، والاسم صحيح، والسر خاطئ بهدوء.
| How you write it | What PowerShell does | Result |
|---|---|---|
| "p@ss$word!42" | Expands $word as a variable | Stored key is truncated |
| Double-quoted with an escape character | Consumes the next character as an escape | One character disappears |
| 'p@ss$word!42' | Keeps the literal characters | Stored key matches the secret |
علامات الاقتباس المفردة هي الحل، ويجب أن تحيط بالقيمة كاملة. إذا كان المدخل موجودا بمفتاح سيئ، فإن -Force يستبدله، أو احذف الملف وأعد إنشاءه ثم اختبر باتصال جديد:
Add-VpnConnection -Name "Contoso-L2TP" -ServerAddress vpn.contoso.example -TunnelType L2tp -L2tpPsk 'n3w$ecret!2026' -AuthenticationMethod Pap -RememberCredential -Force
أبق السر الحقيقي خارج سجل الصدفة والسكربتات المشتركة. اقرأه وقت التشغيل من المخزن المعتمد ومرر المتغير بدلا من القيمة الحرفية، وهذا يتجنب مشكلة الاقتباس تماما.
غير العنوان ثم أعد الاتصال
يأخذ Set-VpnConnection معاملات مفصولة بمسافات، لا صيغة إسناد. فكتابة -ServerAddress = "203.0.113.10" تمرر رمزا إضافيا، فيخطئ الأمر أو يخزن شيئا لم تقصده. الصيغة الصحيحة هي -Name "Office L2TP" -ServerAddress 203.0.113.10.
حتى مع الصيغة الصحيحة، لا يصل التغيير إلى نفق قائم بالفعل. يحتفظ الاتصال القائم بالعنوان الذي اتصل به حتى ينقطع، لذا لا يثبت اختبار الجلسة نفسها شيئا عن القيمة الجديدة. افصل الاتصال، وحرر، وأعد الاتصال، وتأكد من عنوان النظير في تفاصيل الاتصال.
بعض الخصائص لا يمكن تغييرها في المكان. حين يرفض الأمر، سجل المعاملات القائمة، احذف الملف وأنشئه من جديد بالقيم الصحيحة، وأبق إعدادات النفق والمصادقة الأصلية. السكربت الذي يحتاج إلى تغيير رقم الهاتف فقط يمكنه تحرير مدخل دفتر الهاتف عبر RAS API بدل إعادة إنشاء كل شيء. وأيا كان المسار، تحقق من القيم المخزنة بعد ذلك بدلا من الثقة في صمت الأمر.
اعرف أي دفتر هاتف حررت
يقع ملف المستخدم الواحد في دليل اتصالات الشبكة الخاص بذلك المستخدم، ويقع ملف جميع المستخدمين في الدليل الخاص بالجهاز تحت شجرة بيانات البرامج. إنهما مدخلان مختلفان بنطاقين مختلفين، وتحرير أحدهما يترك الآخر دون مساس.
لهذا قد يبدو التغيير وكأنه تلاشى: شغل السكربت بحساب، والاختبار بحساب آخر. استخدم -AllUserConnection حين يكون الملف ملكا للجهاز، وتحقق من النطاق نفسه عند قراءته مرة أخرى.
اقرأ الملف مرة أخرى قبل الاختبار
اسأل Windows عما خزنه لا عما مررته:
Get-VpnConnection -Name "Office L2TP" | Select-Object Name, ServerAddress, TunnelType, AuthenticationMethod
قارن ذلك الناتج بالقصد، ثم ابدأ اتصالا جديدا. إذا فشل الاتصال، تحقق من سجل عميل RAS في عارض الأحداث قبل تغيير الملف مرة أخرى، لأن السجل يسمي المرحلة التي فشلت.
أبق تصميم المصادقة سليما أثناء التحرير. الأمر الذي يغير العنوان لكنه يسقط الشهادة أو إعداد EAP ينتج فشلا يبدو غير مرتبط بالتحرير، وتصدير الملف العامل أولا يمنحك ما تستعيده بدلا من التخمين.