يفتح
يغلق

الاتصال بجهاز كمبيوتر آخر عبر بوويرشيل. بوويرشيل: استخدام أمر الاستدعاء cmdlet. إدارة واحد إلى متعدد

  • درس تعليمي

هناك حد أدنى من النظرية هنا، ومعظمها جزء عملي. فهو يصف كيفية تكوين WinRM، وكيفية تغيير ملف تعريف محول الشبكة، ويوفر برنامجًا نصيًا للإضافة إلى TrustedHosts مع التصفية، ويشرح سبب الحاجة إلى مضيفين موثوقين، ويناقش الاتصالات عن بعد بشكل سطحي بحيث يمكنك الجلوس وإدارة الأجهزة البعيدة على الفور.

أسهل طريقة لتكوين جهاز التحكم عن بعد هي التشغيل تمكين-PSRemoting في Powershell مع حقوق المسؤول. سيحدث ما يلي:

  • ستبدأ خدمة WinRM (في حالة تشغيلها، سيتم إعادة تشغيلها)
  • ستتحول خدمة WinRM إلى الحالة - بدء التشغيل التلقائي عند بدء التشغيل
  • سيتم إنشاء مستمع WinRM لـ HTTPحركة المرور على الميناء 5985 لجميع عناوين IP المحلية
  • سيتم إنشاء قاعدة جدار الحماية لمستمع WinRM. انتبه، ستفشل هذه الخطوة مع حدوث خطأ إذا كانت أي من بطاقات الشبكة من نوع الشبكة "العامة"، لأن فتح منفذ على مثل هذه البطاقة ليس جيدًا. إذا تلقيت هذا الخطأ عند التكوين، فقم بتغيير ملف تعريف cmdlet الخاص بالشبكة Set-NetConnectionProfile وبعد ذلك قم بتشغيل Enable-PSRemoting مرة أخرى. إذا كنت بحاجة إلى بطاقة شبكة ذات ملف تعريف "الشبكة العامة"، فقم بتشغيل Enable-PSRemoting باستخدام المعلمة -SkipNetworkProfileCheckوفي هذه الحالة، سيتم إنشاء قواعد جدار الحماية من الشبكة المحلية فقط.
بعد ذلك، تحتاج إلى السماح بالاتصال بالجهاز البعيد من الجهاز الذي سيتم التحكم منه. تم ذلك لأغراض أمنية من أجل تقليل مخاطر اختراق جلسة التحكم عن بعد أو DNS عن طريق استبدال نفسك بدلاً من جهاز بعيد ولمنع تنفيذ البرامج النصية على الأجهزة التي لم تسمح بها بالقوة.

للتحقق من المكان الذي يمكنك الاتصال به، استخدم:
الحصول على العنصر wsman:\localhost\Client\TrustedHosts
للحصول على إذن للاتصال بالجميع
مجموعة العناصر wsman: localhost\client\trustedhosts -value *
إذا قمت بفتح الوصول للجميع عن طريق تحديد *، فسوف يتصل WinRM بجميع الأجهزة دون التحقق. تذكر أنك تعرض نفسك للاختراق المحتمل من شبكتك المحلية. من الأفضل تحديد عناوين المضيف التي تحتاج إلى الاتصال بها، ثم سيرفض WinRM جميع العناوين أو الأسماء الأخرى. إذا كان الجهاز الذي يتم التحكم فيه موجودًا في مجال ما، فسوف يثق في جميع الأجهزة الموجودة في هذا المجال. إذا لم يكن موجودًا في المجال، أو في مجال آخر، فأنت بحاجة إلى تحديد عنوان أو اسم الجهاز الذي سنتصل به في TrustedHosts. ليست هناك حاجة لإضافة نفسك على الجهاز الذي نتصل به.

تحتوي المساعدة على أوامر، لقد قمت بتعديلها قليلاً إلى برنامج نصي
##################################################################################################### ############################## يضيف NewHost إلى قائمة TrustedHost مع التصفية إذا كان هذا الخط موجودًا بالفعل # يمكنك سحبه من سطر الأوامر عن طريق تحديد المعلمة مباشرة، على سبيل المثال # .\Add-TrustedHost.ps1 192.168.2.1 ###################### ######## ############################################################################################### ######## ###### param ($NewHost = "192.168.2.89") مضيف الكتابة "إضافة مضيف: $NewHost" $prev = (get-item WSMan:\localhost\Client\TrustedHosts .value if (($prev .Contains($NewHost)) -eq $false) ( if ($prev -eq "") (عنصر المجموعة WSMan:\localhost\Client\TrustedHosts -Value "$ مضيف جديد" } else { set-item WSMan:\localhost\Client\TrustedHosts -Value "$السابق, $NewHost" } } Write-Host "" Write-Host "Now TrustedHosts contains:" (get-item WSMan:\localhost\Client\TrustedHosts).value !}
فهو يتحقق لمعرفة ما إذا كان هذا الإدخال موجودًا، وإذا لم يكن موجودًا، فإنه يضيفه إلى القائمة. يمكنك الاتصال به من سطر الأوامر عن طريق تحديد العنوان أو الاسم.

هناك فرق بين تحديد اسم أو عنوان. إذا كان هناك عنوان فقط في TrustedHosts، فلن يكون من الممكن فتح جلسة بالاسم، والعكس صحيح - إذا حددت اسمًا، فلن يكون من الممكن إرفاقه بالعنوان. خذها بعين الاعتبار.

ماهو الفرق

يقوم Enable-PSRemoting بأكثر من مجرد "winrm Quickconfig". يقوم Set-WSManQuickConfig cmdlet بنفس الشيء تمامًا مثل "winrm Quickconfig". يقوم Enable-PSRemoting بتشغيل Set-WSManQuickConfig عند تكوين النظام

اتصالات عن بعد
1. جلسات 1 إلى 1
فتح عن طريق الأمر
أدخل-PSSession-اختبار اسم الكمبيوتر
سوف تحصل على قذيفة على الجهاز البعيد. يمكنك الاتصال بنفسك عن طريق تحديد المضيف المحلي. يتم تحديد الاعتمادات البديلة مع المعلمة -الاعتماد، يحدث الخروج باستخدام الأمر cmdlet خروج-PSSession

القيود هي كما يلي:

  • لا يمكنك إجراء قفزة ثانية - جلسة واحدة فقط، ولا يمكنك الاتصال أكثر خلال الجلسة
  • لا يمكنك استخدام أوامر واجهة المستخدم الرسومية. إذا قمت بذلك، فسوف يتعطل الصدفة، اضغط على Ctrl+C لتعليقه
  • لا يمكنك تشغيل الأوامر التي لها غلاف خاص بها، على سبيل المثال nslookup، netsh
  • يمكنك تشغيل البرامج النصية إذا كانت سياسة التشغيل على الجهاز البعيد تسمح بتشغيلها
  • لا يمكنك إرفاق جلسة تفاعلية، قمت بتسجيل الدخول باسم "تسجيل الدخول إلى الشبكة"، كما لو كانت متصلة بمحرك أقراص الشبكة. لذلك، لن يتم تشغيل البرامج النصية لتسجيل الدخول، وقد لا تتمكن من الحصول على المجلد الرئيسي على الجهاز البعيد (سبب آخر لعدم تعيين المجلدات الرئيسية باستخدام البرامج النصية لتسجيل الدخول)
  • لن تتمكن من التفاعل مع المستخدم على الجهاز البعيد حتى لو قام بتسجيل الدخول هناك. لن تتمكن من إظهار النافذة له أو طباعة أي شيء له.
هذه الطريقة هي الأفضل للعمليات البسيطة: قمت بتسجيل الدخول، وقمت بالاتصال بالخادم ثم قمت بقطع الاتصال. إذا كنت بحاجة إلى الاحتفاظ بالمتغيرات معًا، فأنت بحاجة إلى عملية طويلة (عدة ساعات أو أيام)، وتحتاج إلى المزيد من القدرات الإدارية، ثم تحتاج إلى استخدام تكنولوجيا أكثر تقدمًا.
تعليق.
يتم قطع الكائنات المنقولة عبر الشبكة وتتوقف عن الحياة. تتم إزالة أساليبهم، ولكن خصائصها تبقى. لن تتمكن من سحب أي شيء إلى سيارتك أو القيام ببعض السحر وإعادته مرة أخرى. إذا كنت بحاجة إلى المزيد، فاكتب، سأضيفه بشكل منفصل.

2. جلسات من جلسة واحدة إلى عدة جلسات
استدعاء الأمر
نحدد ما سنفعله كالتالي:
$sb = (أوامر الجهاز البعيد مفصولة بفواصل منقوطة)
إرسال Test1 وTest2 إلى الأجهزة البعيدة
استدعاء الأمر - اسم الكمبيوتر Test1، Test2 -ScriptBlock $sb
يمكنك رميها على 32 سيارة في المرة الواحدة. إذا كانت هناك اعتمادات بديلة، فاستخدم المعلمة -Credential

لنقل البرنامج النصي بأكمله بدلاً من المعلمة -ScriptBlock، نكتب -FilePath، لا يحتاج الجهاز البعيد إلى الوصول إلى الملف، وسيتم تفكيكه إلى أجزاء، وإرساله عبر HTTP وتنفيذه على الجانب الآخر.

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

لاستخدام Invoc-Command بشكل كامل، يجب أن تكون قادرًا على تحويل الأسطر إلى كتل نصية. على سبيل المثال، لديك أوامر تعتمد على قائمة ما، وتحتاج إلى إنشاء سطر وتحويله إلى ScriptBlock وإرساله إلى كمبيوتر بعيد:
$sb = ::إنشاء($SomeString)
كودا78
أخطأت المقالة نقطة مهمة جدًا - وهي تمرير المعلمات إلى البرنامج النصي الموجود على جهاز بعيد.

$ ديبلوي ريموت = (
المعلمة (
$targetEnvName,
$targetUsername)
$Global:ErrorActionPreference = "إيقاف"
#…
}

استدعاء-الأوامر -جلسة $session -ScriptBlock $deployRemote -ArgumentList ($targetEnvName، $targetUsername)


نعم غاب حقا. لقد فعلت ذلك عمدا حتى لا تشوش المراجعة بالمعلمات والأوصاف. شكرًا لك. تعمل المعلمة -ArgumentList مع كل من كتل البرامج النصية والبرامج النصية

3. الجلسات
وذلك عندما يتم إنشاء نسخة من الكود على الجانب الآخر، وتبقى معلقة باستمرار في الذاكرة، ويتم إرسال الأوامر إليها. ونتيجة لذلك، يمكنك إعادة الاتصال به، أو استغراق وقت طويل لتشغيله للتنفيذ، أو الاتصال من برامج نصية مختلفة أو مستخدمين مختلفين. على سبيل المثال، لديك مجموعة من البرامج النصية التي تحل مشكلة واحدة في أجزاء، كل منها بدوره يمكنه الاتصال بجلسة واحدة عن بعد، والاطلاع على نتائج الأوامر السابقة، ولها نفس الوحدات المحملة، والمتغيرات المشتركة، والبيئة المشتركة، حتى تم إغلاق الجلسة قسرا.

يتم إنشاء الجلسة باستخدام New-PSSession cmdlet، ويمكن وضع النتيجة في متغير
$DC01 = New-PSSession -ComputerName DC01 $وحدات التحكم = New-PSSession DC01، DC02، DC03
يمكنك استخدام نفس معلمات الاتصال كما في Invoc-Command

كيف تستعمل:
إذا 1 إلى 1
أدخل-PSSession -الجلسة $DC01
إذا كان 1 إلى كثير
استدعاء-الأوامر -جلسات التحكم $ -ScriptBlock (الحصول على سجل الأحداث -أمان اسم السجل -أحدث 50)
يمكنك معرفة الجلسات المفتوحة باستخدام Get-PSSession، وأغلق Remove-PSSession
إغلاق كافة الجلسات تماما
الحصول على PSSession | إزالة-PSSession
يمكنك إرفاق جلسة باستخدام Connect-PSSession، وقطع الاتصال باستخدام Disconnect-PSSession

يمكن لـ Invocation-Command إنشاء جلسة غير متصلة على الفور، وإرسال أوامر للتنفيذ وقطع الاتصال لاحقًا، ويمكنك الاتصال وتنزيل نتائج العمل. يتم ذلك باستخدام المعلمة -Disconnected. تلقي النتائج باستخدام Recieve-PSSession cmdlet.

تحتوي الجلسات على الكثير من الإعدادات، حتى أنه من الممكن إنشاء جلسات باستخدام مجموعة من الأوامر والوحدات وما إلى ذلك. تسمى نقاط النهاية المخصصة

منذ وقت ليس ببعيد، اضطررت إلى قضاء بعض الوقت في إعداد الوصول عن بعد عبر Powershell. يبدو لي أن هذا الأسلوب بديل جيد جدًا لخدمات سطح المكتب البعيد في عدد من الحالات (إعادة تشغيل الخدمة على استضافة VDS عن بعد، وعمل نسخ احتياطية، وعرض حالة النظام، وما إلى ذلك).

تم تقديم القدرة على إنشاء جلسات Powershell عن بعد في الإصدار 2. للقيام بذلك، استخدم Enter-PSSession / Invoce-Command cmdlet. ومع ذلك، يجب إعداد البيئة قبل استخدامها.

الذي نفعله على الخادم:

الخطوة 1:افتح وحدة تحكم Powershell وقم بتمكين الجلسات البعيدة باستخدام الأمر Enable-PSRemoting cmdlet باستخدام مفتاح Force.

تمكين-PSRemoting -القوة

الخطوة 2:تأكد من تشغيل خدمة WinRM.

بدء تشغيل خدمة WinRM

الخطوه 3:نقوم بتكوين القواعد في جدار الحماية حتى تكون الاتصالات الواردة ممكنة.

على الكمبيوتر الذي سيتم استخدامه عميلتحتاج أيضًا إلى تنفيذ عدة خطوات:

الخطوة 1:السماح بالاتصالات بالمضيفين البعيدين. للوصول إلى أي عقد، يمكنك استخدام البناء التالي:

مجموعة العناصر wsman:\localhost\client\trustedhosts * -Force

الخطوة 2:تأكد من أن جدار الحماية الخاص بك لا يحظر الاتصالات الصادرة.

الآن للاتصال بعقدة بعيدة عبر Powershell، يمكنك القيام بذلك:

أدخل-PSSession 192.168.1.160 -بيانات الاعتماد VMNAME\User

يجب استبدال القيمتين 192.168.1.160 وVMNAME\User بعنوان المضيف البعيد واسم مستخدم Windows على الخادم.

الآن يعمل الوصول عن بعد عبر Powershell. ومع ذلك، هناك فارق بسيط آخر. ربما يستخدم البعض منكم الملفات الشخصية في Powershell. الملفات الشخصية هي نصوص برمجية خاصة يتم تشغيلها عند بدء تشغيل وحدة التحكم نفسها. هنا، على سبيل المثال، يمكنك تحديد جميع الأسماء المستعارة الضرورية وتنفيذ الخطوات الأولية.

المشكلة هي أن ملفات التعريف لا تبدأ عند استخدام الجلسات البعيدة. يمكن حل هذه المشكلة باستخدام تكوينات اتصال مختلفة. للقيام بذلك، تحتاج أولاً إلى تسجيل التكوين على الخادم البعيد. يمكنك القيام بذلك عن طريق تشغيل الأمر Register-PSSessionConfiguration cmdlet. في هذه الحالة، يتم تعيين اسم لكل تكوين. لكل تكوين، يمكنك تعيين المسار إلى البرنامج النصي، والذي سيتم تنفيذه عند بدء الجلسة.

تسجيل-PSSessionConfiguration -name Config1 -startupScript c:\scripts\Startup.ps1

بعد ذلك، عند الاتصال بمضيف بعيد، يجب عليك تحديد اسم التكوين عند استخدام الأمر Enter-PSSession cmdlet.

أدخل-PSSession 192.168.1.160 -ConfigurationName Config1 -بيانات الاعتماد VMNAME\User

يمكنك الآن تجنب إهدار موارد الخادم عند إنشاء جلسة اتصال عبر Remote Desktop Services وإدارة الخادم عن بعد باستخدام Powershell.

إطلاق تطبيق بوويرشيل عن بعد

بدء جلسة تفاعلية

لبدء جلسة تفاعلية مع كمبيوتر بعيد واحد، استخدم Enter-PSSession cmdlet. على سبيل المثال، لبدء جلسة تفاعلية مع الكمبيوتر البعيد Server01، أدخل:
أدخل-psession Server01
سيعرض موجه الأوامر اسم الكمبيوتر الذي تتصل به. في المستقبل، سيتم تشغيل جميع الأوامر التي يتم إدخالها في سطر الأوامر على الكمبيوتر البعيد، وسيتم عرض النتائج على الكمبيوتر المحلي.
لإنهاء الجلسة التفاعلية، أدخل:
خروج العاطفة

تنفيذ أمر عن بعد

لتشغيل أي أمر على واحد أو أكثر من أجهزة الكمبيوتر البعيدة، استخدم الأمر Invoc-Command cmdlet. على سبيل المثال، لتشغيل أمر Get-UICulture على أجهزة الكمبيوتر البعيدة Server01 وServer02، أدخل:

استدعاء الأمر - اسم الكمبيوتر Server01، Server02 (get-UICulture)
سيتم إرجاع الإخراج إلى جهاز الكمبيوتر الخاص بك.
لتشغيل البرنامج النصي على واحد أو أكثر من أجهزة الكمبيوتر البعيدة، استخدم معلمة FilePath الخاصة بأمر Invoce-Command cmdlet. يجب تمكين البرنامج النصي أو توفره على الكمبيوتر المحلي. سيتم إرجاع النتائج إلى جهاز الكمبيوتر المحلي الخاص بك.
على سبيل المثال، يقوم الأمر التالي بتشغيل البرنامج النصي DiskCollect.ps1 على أجهزة الكمبيوتر البعيدة Server01 وServer02.
استدعاء الأمر - اسم الكمبيوتر Server01، Server02 - مسار الملف c:\Scripts\DiskCollect.ps1

إعداد اتصال دائم
لتشغيل سلسلة من الأوامر ذات الصلة مع البيانات المشتركة، قم بإنشاء جلسة على الكمبيوتر البعيد، ثم استخدم Invoc-Command cmdlet لتشغيل الأوامر في الجلسة التي تم إنشاؤها. لإنشاء جلسة عمل عن بعد، استخدم New-PSSession cmdlet.
على سبيل المثال، يقوم الأمر التالي بإنشاء جلسة عمل عن بعد على جهاز الكمبيوتر Server01 وجلسة عمل أخرى عن بعد على جهاز الكمبيوتر Server02. يقوم بتخزين كائنات الجلسة في المتغير $s.
$s = new-pssession -اسم الكمبيوتر Server01، Server02
بمجرد إنشاء الجلسات، يمكنك تشغيل أي أمر عليها. نظرًا لأن الجلسات مستمرة، يمكنك جمع البيانات في أمر واحد واستخدامها في أمر لاحق.
على سبيل المثال، يقوم الأمر التالي بتشغيل الأمر Get-Hotfix عبر جلسات العمل في المتغير $s ويخزن النتائج في المتغير $h. يتم إنشاء المتغير $h في كل جلسة في $s، ولكنه غير موجود في الجلسة المحلية.
استدعاء الأمر -جلسة $s ($h = الحصول على الإصلاح العاجل)
يمكن الآن استخدام البيانات الموجودة في $h في الأوامر اللاحقة، مثل ما يلي. سيتم عرض النتائج على جهاز الكمبيوتر المحلي الخاص بك.

استدعاء الأمر -session $s ($h | حيث ($_.installedby -ne "NTAUTHORITY\SYSTEM")

كل شيء مأخوذ من https://technet.microsoft.com/ru-ru/library/dd819505.aspx

اليوم، يعد PowerShell Remoting الأداة الرئيسية للإدارة عن بعد لأنظمة تشغيل Windows. لذلك، يجب على كل مسؤول عن نظام Windows التعرف على إمكانياته واستخدامه في مهامه اليومية. لتشغيل الأوامر على أجهزة الكمبيوتر البعيدة باستخدام PowerShell Remoting، يمكنك استخدام Powershell cmdlet استدعاء الأمر(الاسم المستعار آي سي إم).

تعتمد وظيفة أمر Invocation-Command cmdlet على بروتوكول Web Services for Management ( إدارة WS) وخدمة إدارة Windows عن بعد ( WinRM)، تستخدم للاتصالات. يتم الاتصال بين أجهزة الكمبيوتر باستخدام HTTP (افتراضي) أو HTTPS. يتم تشفير كل حركة المرور بين جهازي كمبيوتر على مستوى البروتوكول. يتم دعم العديد من أساليب المصادقة، بما في ذلك NTLM وKerberos. تم تقديم القدرة على إنشاء جلسات عمل عن بعد في Powershell 2.0.

للاتصال بجهاز كمبيوتر عن بعد عبر PowerShell Remoting، تحتاج إلى تنفيذ عدد من الإعدادات عليه:

  1. تحتاج إلى السماح بالاتصالات عن بعد: Enable-PSRemoting -Force
  2. ابدأ تشغيل خدمة WinRM: Start-Service WinRM
  3. قم بإنشاء قاعدة جدار حماية Windows التي تسمح بالاتصالات الواردة باستخدام هذا البروتوكول.

يجب أيضًا تكوين الكمبيوتر الذي تخطط لإدارة أجهزة الكمبيوتر/الخوادم الأخرى عن بعد عبر PowerShell Remoting:

  1. يجب عليك السماح بالاتصالات بالأنظمة البعيدة. لتوفير الوصول إلى كافة أجهزة الكمبيوتر البعيدة، استخدم الأمر: Set-Item wsman:\localhost\client\trustedhosts * -Force
  2. تأكد من أن جدار الحماية الخاص بك لا يحظر الاتصالات الصادرة.

الآن، لتشغيل أمر على جهاز بعيد عبر Powershell Remoting (على سبيل المثال، تريد إعادة تشغيل خدمة الطباعة Spooler)، تحتاج إلى تشغيل الأمر التالي:

استدعاء-الأمر -اسم الكمبيوتر server1 -مجال بيانات الاعتماد\user1 -scriptblock (التخزين المؤقت لإعادة تشغيل الخدمة)

هذا الأمر ينفذ الأمر إعادة تشغيل-التخزين المؤقت للخدمةعلى جهاز كمبيوتر بعيد اسمه خادم 1. يتم استخدام معلمة بيانات الاعتماد لتشغيل الأمر في سياق الأمان لمجال مستخدم المجال domain\user1.

عند تحديد اسم مستخدم، يعرض Windows PowerShell مربع حوار يطلب منك توفير كلمة المرور لحساب user1. يتم بعد ذلك تنفيذ الأمر المحدد بين الأقواس المتعرجة على الكمبيوتر البعيد وإرجاع النتائج إلى وحدة التحكم. بمجرد تنفيذ الأمر، تنتهي جلسة PoSh عن بعد.

لتشغيل مهمة في الخلفية، يمكنك تحديد المعلمة -AsJob.

عند تشغيل أمر في الخلفية، لا يقوم PowerShell بإرجاع نتائجه. لاستلامها، تحتاج إلى استخدام الأمر Receive-Job cmdlet.

الحصول على وظيفة –معرف 3 |استلام الوظيفة

لتشغيل ليس أمرًا واحدًا فحسب، بل تشغيل برنامج PowerShell النصي بأكمله، يحتوي أمر Invoc-Command cmdlet على وسيطة خاصة -FilePath، والتي يجب استخدامها بدلاً من -ScriptBlock لتحديد المسار إلى ملف البرنامج النصي. على سبيل المثال، قمت بإنشاء برنامج PoSh صغير يعرض قائمة بالخدمات المتوقفة. لنقم بتشغيل هذا البرنامج النصي على كمبيوتر بعيد:

استدعاء-الأمر -اسم الكمبيوتر server1 -FilePath .\list.ps1

من المهم أن نلاحظ هنا أنك لا تحتاج إلى نسخ ملف البرنامج النصي ps1 إلى الكمبيوتر البعيد بنفسك. يتم إخراج نتائج تنفيذ البرنامج النصي إلى وحدة التحكم.

في كثير من الأحيان تكون هناك حاجة إلى تنفيذ نفس الأمر/البرنامج النصي في وقت واحد على عدة أجهزة كمبيوتر. باستخدام Invoc-Command يتم تنفيذ ذلك بكل بساطة. يمكنك إدراج أسماء أجهزة الكمبيوتر مفصولة بفواصل في الوسيطة -اسم الحاسوب.

استدعاء-الأوامر -ScriptBlock (التخزين المؤقت للخدمة لإعادة التشغيل) -اسم الكمبيوتر server1,server2,server3

أو ضعها في مصفوفة:

$srv_list = @(″server4″,″server5″,″server6″)
استدعاء-الأوامر -ScriptBlock (التخزين المؤقت للخدمة إعادة التشغيل) -اسم الكمبيوتر $servers

أو قم بالتحميل من ملف اختبار:

استدعاء-الأوامر -ScriptBlock (التخزين المؤقت لخدمة إعادة التشغيل) -اسم الكمبيوتر (Get-Content .\servers_list.txt)

سيتم تنفيذ الأمر على كل كمبيوتر، وسيتم عرض نتائج تنفيذه في وحدة التحكم.

ملحوظة. يحتوي cmdlet أمر الاستدعاء على معلمة ThrottleLimitوالذي يسمح لك بتعيين الحد الأقصى لعدد أجهزة الكمبيوتر التي يمكن تنفيذ نفس الأمر عليها في وقت واحد. بشكل افتراضي، يقتصر الكمبيوتر على الرقم 32 . يمكن زيادة هذا الرقم إذا لزم الأمر، ولكن ضع في اعتبارك أن زيادة هذا الإعداد تزيد من الحمل على معالج الكمبيوتر والذاكرة، لذلك يجب إجراء هذه العملية بحذر.

إذا تم تثبيته، يصبح من الممكن تشغيل الأوامر في وقت واحد على أجهزة كمبيوتر متعددة محددة من AD باستخدام خطوط الأنابيب:

Get-ADComputer -Filter * -اسم الخصائص | حدد (الاسم = "اسم الكمبيوتر"؛ التعبير = ("$ _." الاسم")) | استدعاء الأمر -ScriptBlock (اسم المضيف)

في كل مرة يتم فيها تشغيل Invocation-Command، يتم إنشاء جلسة جديدة تستهلك بعض وقت وحدة المعالجة المركزية ومواردها. لتجنب إهدار الموارد، يمكنك استخدام جلسة واحدة لتشغيل كافة الأوامر. على سبيل المثال، لنقم بإنشاء جلسة sess1 جديدة مع جهاز الكمبيوتر الخاص بنا وتخصيصها للمتغير $session، ثم تنفيذ مهمتنا في هذه الجلسة:

$session = New-PSSession -ComputerName الكمبيوتر 1 -Name sess1
استدعاء-الأوامر -ScriptBlock (التخزين المؤقت للخدمة إعادة التشغيل) -جلسة $session

ستظل هذه الجلسة نشطة حتى تقوم بإغلاق وحدة تحكم PowerShell. يمكنك أيضًا إغلاق الجلسة (Disconnect-PSSession) أو حذفها (Remove-PSSession).

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

للتحكم عن بعد، هناك شرطان ضروريان: أولاً، من الطبيعي أن يتم تثبيت Powershell و.NET Framework وخدمة Windows Remote Management (جميع المكونات من الإصدار 2.0 والإصدارات الأحدث) على كلا الجهازين، وثانيًا، أن يكونوا تم تكوينها للتحكم عن بعد. بالنسبة لنظام التشغيل Windows 7 والإصدارات الأحدث، لا تحتاج إلى تثبيت أي شيء، فكل شيء موجود بالفعل؛ أما بالنسبة لنظام التشغيل Windows XP/2003، فأنت بحاجة إلى تثبيت .NET Framework وPowershell (تأتي خدمة Windows Remote Management مرفقة مع Powershell).

بعد تثبيت كل ما هو ضروري، تحتاج إلى تكوين الكمبيوتر الذي ستحتاج إلى الاتصال به للسماح بالاتصالات عن بعد. للقيام بذلك، تحتاج إلى تشغيل الأمر winrm Quickconfig أو winrm qc. يقوم هذا الأمر بعدة أشياء في وقت واحد:

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

في هذه المرحلة يمكننا القول أن الكمبيوتر جاهز للاتصالات عن بعد، ولكن من الناحية العملية قد يكون من الضروري أيضًا تشغيل الأمر Enable-PSRemoting.

الجميع! اكتمل إعداد الكمبيوتر ويمكنك الاتصال به. الآن بضع كلمات حول كيفية الاتصال. أسهل طريقة هي استخدام الأمر cmdletأدخل-PSSession ، متبوعًا باسم الكمبيوتر الذي تريد الاتصال به، على سبيل المثال:

أدخل-PSSession NameOfRemoteComputer

باستخدام هذه الطريقة، ستتمكن من الاتصال إذا كانت أجهزة الكمبيوتر أعضاء في مجال، أو إذا كان هناك مستخدم على الكمبيوتر البعيد وهو عضو في مجموعة "المسؤولين" له نفس تسجيل الدخول وكلمة المرور مثل المستخدم الحالي.

بالمناسبة، بشكل افتراضي، يمكن لأعضاء مجموعة "المسؤولين" فقط الاتصال بجهاز كمبيوتر بعيد (سنتحدث عن كيفية إصلاح ذلك مرة أخرى).

ولكن ماذا لو لم تكن أجهزة الكمبيوتر في مجال (أو في مجالات مختلفة) وكانت تسجيلات دخول المسؤول وكلمات المرور مختلفة؟

في هذه الحالة، أمر cmdletأدخل-PSSession يجب أن تستخدم مع المعلمة-الاعتماد ، والذي يسمح لك بإدخال بيانات الاعتماد اللازمة للاتصال. ولكن قبل الاتصال بجهاز الكمبيوتر الخاص بك، تحتاج إلى إضافته إلى قائمة المضيفين الموثوق بهم. يتم ذلك باستخدام الأمر:

مجموعة العناصر WSMan:\localhost\Client\TrustedHosts - قيمة اسم الكمبيوتر

حيث اسم الكمبيوتر — اسم الكمبيوتر الذي سنقوم بالاتصال به. يمكنك تحديد كل من اسم الكمبيوتر وعنوان IP الخاص به، ومع ذلك، يجب أن تتذكر أن ما تدخله هنا سيحتاج إلى استخدامه لاحقًا للاتصال، أي. إذا قمت بتحديد عنوان IP، فلن تتمكن من الاتصال بالكمبيوتر عن طريق تحديد اسمه؛ وسوف تحتاج إلى تحديد عنوان IP، والعكس صحيح.