الصفحة الرئيسية » howto » Geek School تعلم كيفية استخدام الاتصال عن بعد في PowerShell

    Geek School تعلم كيفية استخدام الاتصال عن بعد في PowerShell

    واحدة من أفضل الميزات التي تقدمها PowerShell هي القدرة على إدارة الخوادم عن بعد. حتى أنه يتيح لك إدارة مجموعة منهم في وقت واحد كذلك.

    تأكد من قراءة المقالات السابقة في السلسلة:

    • تعلم كيفية أتمتة ويندوز مع PowerShell
    • تعلم استخدام Cmdlets في PowerShell
    • تعلم كيفية استخدام الكائنات في PowerShell
    • تعلم تنسيق وتصفية ومقارنة في PowerShell

    وتنبقي لبقية المسلسل طوال الأسبوع.

    ما هو الاتصال عن بعد?

    يمكن أن تكون الإدارة الجماعية لخوادمك مملة ، وإذا كان عليك إجراء تغيير في تكوين IIS على 50 خادم ويب من قبل ، فستعرف ما أقصده. هذه هي أنواع المواقف التي يمكن أن يصل فيها الإنقاذ إلى PowerShell Remoting وقدرات البرمجة النصية للغة. باستخدام HTTP أو HTTPS الأكثر أمانًا ، يتيح لك PowerShell Remoting إرسال الأوامر إلى جهاز بعيد على الشبكة. ثم يقوم الجهاز بتشغيل الأوامر وإرسال الإخراج إليك ، والذي يتم عرضه بدوره على الشاشة.

    دعونا الحصول على التقنية

    يوجد في قلب PowerShell Remoting خدمة Windows واحدة ، أو إدارة Windows عن بعد ، أو خدمة WinRM ، كما أصبحت معروفة. باستخدام WinRM ، يمكنك إعداد واحد أو أكثر من تكوينات الجلسة (التي تعرف أيضًا بنقاط النهاية) ، وهي بشكل أساسي ملفات تحتوي على معلومات حول التجربة التي تريد توفيرها للشخص الذي يتصل بمثيل PowerShell البعيد. وبشكل أكثر تحديدًا ، يمكنك استخدام ملفات توصيف الجلسة لتحديد من يمكنه ، وماذا لا يستطيع الاتصال بالمثيل ، ما أوامر cmdlets والبرامج النصية التي يمكن تشغيلها ، بالإضافة إلى سياق الأمان الذي يجب تشغيله تحت الجلسة. باستخدام خدمة WinRM ، يمكنك أيضًا إعداد "المستمعين" ، الذين يستمعون لطلبات PowerShell الواردة. يمكن أن يكون هؤلاء "المستمعون" إما HTTP أو HTTPS ويمكن ربطهم بعنوان IP واحد على جهازك. عند فتح اتصال PowerShell بجهاز آخر (تقنيًا يتم ذلك باستخدام بروتوكول WS-MAN ، الذي يستند إلى HTTP) ، يرتبط الاتصال بأحد هؤلاء "المستمعين". "المستمعون" هم المسؤولون عن إرسال الحركة إلى التطبيق المرتبط بملف تهيئة الجلسة المناسب ؛ التطبيق (عادة PowerShell ولكن يمكنك الحصول على تطبيقات استضافة أخرى إذا كنت تريد) ثم تشغيل الأمر وإطعام النتائج مرة أخرى من خلال "المستمع" عبر الشبكة والعودة إلى جهازك.

    أرني كيف

    أول شيء ستحتاج إلى القيام به هو تمكين الاتصال عن بعد على الجهاز الذي تريد الاتصال به. يمكن القيام بذلك عن طريق تشغيل ما يلي:

    تمكين PSRemoting

    سوف تحتاج إلى الإجابة بنعم على جميع المطالبات. عند تشغيل Enable-PSRemoting ، يتم إجراء بعض التغييرات على جهاز الكمبيوتر الخاص بك:

    • يبدأ تشغيل خدمة WinRM.
    • تتغير خدمة WinRM من وضع بدء التشغيل اليدوي إلى Automatic (تلقائي).
    • يقوم بإنشاء مستمع HTTP يرتبط بكل بطاقات الشبكة الخاصة بك.
    • كما يقوم بإنشاء استثناء جدار حماية وارد لبروتوكول WS-MAN.
    • يتم تكوين بعض تكوينات الجلسة الافتراضية

    إذا كنت تقوم بتشغيل Windows 7 وكان موقع بطاقة الشبكة الخاص بك مضبوطًا على Public ، فإن تمكين PowerShell Remoting سيفشل. لإصلاحها ، ما عليك سوى التبديل إلى موقع الشبكة "المنزل" أو "العمل". بدلاً من ذلك ، يمكنك تخطي فحص الشبكة باستخدام ما يلي:

    Enable-PSRemoting -SkipNetworkProfileCheck

    ومع ذلك ، نوصيك بتغيير موقع الشبكة الخاص بك.

    هناك طريقتان للاتصال بجهاز آخر باستخدام PowerShell. هناك طريقة واحدة إلى واحدة ، والتي تشبه إلى حد كبير استخدام SSH ، ومن ثم هناك طريقة واحدة إلى العديد من الطرق.

    استخدام جلسة PowerShell

    تستخدم الطريقة الأولى للاتصال بجهاز بعيد باستخدام PowerShell شيئًا يسمى جلسة PowerShell. ببساطة وضع جلسة يسمح لك بتشغيل الأوامر على الجهاز البعيد بطريقة تفاعلية بنفس الطريقة التي تستخدمها على جهازك الخاص. لفتح جلسة ، ما عليك سوى كتابة ما يلي:

    ادخل- PSSession -ComputerName "Darlah"

    ستحصل المطالبة على بادئة تشير إلى الجهاز الذي تقوم بتشغيل أوامر cmdlets ضده.

    من هنا ، يمكنك أن تعاملي تمامًا كما لو كنت تجلس في الجهاز البعيد. على سبيل المثال ، إذا كنت ترغب في رؤية كافة الملفات الموجودة على محرك الأقراص C: \ ، فيمكنك إجراء عملية بسيطة:

    Get-ChildItem -Path C: \

    إذا كنت قادمًا من خلفية Linux ، فيمكنك التفكير في استخدام طريقة واحدة إلى واحدة للتواصل عن بُعد كبديل PowerShell لـ SSH.

    باستخدام Invoke-Command

    الطريقة الثانية التي يمكنك استخدام PowerShell على جهاز بعيد باستخدام Invoke-Command. ميزة استخدام Invoke-Command تأتي من حقيقة أنه يمكنك تنفيذ الأمر نفسه على عدة أجهزة في نفس الوقت. كما يمكنك أن تتخيل ، هذا مفيد بشكل خاص عندما تريد القيام بشيء مثل جمع سجلات الأحداث من الخوادم الخاصة بك. يتبع Invoke-Command بناء الجملة التالي:

    Invoke-Command -ComputerName Darlah، localhost -ScriptBlock Get-EventLog Application -Newest 2

    نظرًا لأن الأمر يتم تنفيذه بالتوازي عبر جميع الأجهزة ، فستحتاج إلى طريقة لمعرفة الكمبيوتر الذي جاءت منه نتيجة معينة. يمكنك القيام بذلك عن طريق النظر إلى الخاصية PSComputerName.

    عند استخدام Invoke-Command ، لم يعد لديك الكائنات التي قد تتوقعها في Pipeline. كما ترى ، لكي يتمكن PowerShell من الحصول على المعلومات من الجهاز البعيد مرة أخرى إلى جهازك ، فإنهم يحتاجون إلى طريقة لتمثيل الكائنات التي قام بتشغيلها الأمر على مخرجات الجهاز البعيد. في هذه الأيام يبدو أن الطريقة المختارة لتمثيل بنية البيانات الهرمية هي استخدام XML ، وهو ما يعني عند إصدار أمر باستخدام Invoke-Command ، يتم أولاً ترتيب تسلسل النتائج في XML قبل إرسالها إلى جهازك. بمجرد العودة إلى جهازك ، يتم إلغاء تسلسلها مرة أخرى إلى كائن ؛ the gotcha هنا هو أنه عندما يتم deserialized ، كل الطرق ، ما عدا طريقة ToString () ، أن تم تجريد الكائن بعيدا عن ذلك.

    ملاحظة: هناك بعض الاستثناءات لهذه القاعدة ، على سبيل المثال يمكن إلغاء إلغاء معظم الأنواع البدائية مثل الأعداد الصحيحة مع أساليبها المتضمنة. هناك أيضًا عملية تسمى Rehydration حيث يمكن إضافة بعض الطرق مرة أخرى إلى الكائنات التي يتم نزعها. لذا فقط كن حذرا وتذكر Get-Member صديقك.

    واجب منزلي

    • قراءة أسرار PowerShell عن طريق الاليكترون عن طريق دون جونز.