إرسال المعلمات إلى أجهزة الكمبيوتر البعيدة في Windows PowerShell
لقد تعلمت بالفعل أن Invoke-Command لا يمكن أن يتضمن متغيرات في كتلة البرنامج النصي أو ملف البرنامج النصي الخاص به ما لم يتمكن الكمبيوتر البعيد من فهم هذه المتغيرات. على هذا النحو، قد يبدو العثور على طريقة لتمرير البيانات من الكمبيوتر الذي يبدأ إلى الكمبيوتر البعيد أكثر تعقيداً. ومع ذلك، يوفر Invoke-Command بالفعل آلية محددة للقيام بهذه المهمة.
للمراجعة، الهدف من الأمر التالي هو عرض قائمة بأحدث 10 إدخالات سجل أحداث الأمان على كل كمبيوتر مستهدف. ومع ذلك، لن يعمل الأمر كما هو مكتوب:
$Log = 'Security'
$Quantity = 10
Invoke-Command –Computer ONE,TWO –ScriptBlock {
Get-EventLog –LogName $Log –Newest $Quantity
}
المشكلة هي أن المتغيرين $Log و$Quantity لهما معانٍ فقط على الكمبيوتر المحلي، ولا يتم إدراج هذه القيم في كتلة البرنامج النصي قبل إرسال تلك القيم إلى أجهزة الكمبيوتر البعيدة. لذلك، لا تعرف أجهزة الكمبيوتر البعيدة ما تعنيه.
بناء الجملة الصحيح لهذا الأمر كما يلي:
$Log = 'Security'
$Quantity = 10
Invoke-Command –Computer ONE,TWO –ScriptBlock {
Param($x,$y) Get-EventLog –LogName $x –Newest $y
} –ArgumentList $Log,$Quantity
باستخدام بناء الجملة هذا، يتم تمرير المتغيرات المحلية إلى المعلمة ArgumentList للأمر Invoke-Command. ضمن كتلة البرنامج النصي، يتم إنشاء كتلة Param() التي تحتوي على نفس عدد المتغيرات، مثل قائمة –ArgumentList للقيم، والذي، في هذه الحالة، يكون اثنين. لاحظ أنه يمكنك تعيين أي أسماء للمتغيرات داخل كتلة Param(). سيتلقون بيانات من المعلمة ArgumentList استناداً إلى الترتيب. بمعنى آخر، لأن $Log تم إدراجه أولاً في ArgumentList، فسيتم تمرير قيمته إلى $x لأن هذا هو الإدخال الأول في كتلة Param(). يمكن بعد ذلك استخدام المتغيرات في كتلة Param() داخل كتلة البرنامج النصي، كما هو موضح في المثال.
سيعمل بناء الجملة هذا مع Windows PowerShell 2.0 والأحدث. غير أن Windows PowerShell 3.0 أدخل نهجاً بديلاً مبسطاً. إذا كان لديك متغير محلي $variable، وتريد تضمين محتوياته في أمر سيتم تشغيله على كمبيوتر بعيد، يمكنك تشغيل بناء الجملة التالي:
Invoke-Command –ScriptBlock { Do-Something $Using:variable } –ComputerName REMOTE
تتم معالجة البادئة $Using: بشكل صحيح بواسطة أجهزة الكمبيوتر المحلية والنائية، مما يؤدي إلى استبدال $Using:variable بمحتويات المتغير المحلي $variable.