تعيين حماية الوصول إلى المتغيرات والأسماء المستعارة والوظائف باستخدام معدِّل النطاق
يوفر Windows PowerShell حماية الوصول إلى المتغيرات والأسماء المستعارة والوظائف ومحركات أقراص Windows PowerShell عن طريق الحد من الأماكن التي يمكن تغييرها وقراءتها. من خلال فرض بعض القواعد البسيطة باستخدام نطاقات Windows PowerShell، فإنك تضمن عدم تغيير عنصر لا ينبغي تغييره عن غير قصد. القواعد الأساسية للنطاقات هي:
- ما لم تجعله خاصاً بشكل صريح، فإن العناصر التي تقوم بتضمينها في النطاق تكون مرئية في النطاق الذي تم إنشاؤه فيه وفي أي نطاق فرعي. يمكنك استخدام المتغيرات أو الأسماء المستعارة أو الوظائف أو محركات الأقراص Windows PowerShell في نطاق واحد أو أكثر.
- يمكن تغيير العناصر التي تقوم بإنشائها ضمن نطاق فقط في النطاق الذي تم إنشاء العنصر فيه ما لم تنص صراحة على نطاق مختلف.
إذا قمت بإنشاء عنصر في نطاق وكان للعنصر نفس اسم العنصر في نطاق مختلف، فقد يتم إخفاء العنصر الأصلي ضمن العنصر الجديد. ومع ذلك، لا يتم تجاوزه أو تغييره.
يمكنك استخدام المتغيرات المحلية في الأوامر البعيدة، ولكن يجب أن تشير إلى أن المتغير محدد في جلسة العمل المحلية. يفترض Windows PowerShell أن المتغيرات المستخدمة في الأوامر البعيدة يتم تعريفها في جلسة العمل التي يتم فيها تشغيل الأمر.
$Using: معدِّل النطاق
كما ذكرنا سابقاً، بدءا من Windows PowerShell 3.0، يمكنك تنفيذ معدِّل النطاق $Using: لتحديد متغير محلي في أمر بعيد. يعد هذا معدِّل نطاق خاصاً، وهو الطريقة الأكثر وضوحاً للإشارة إلى متغير محلي في أمر بعيد. تمرر هذه التقنية قيمة (قيم) المتغير إلى الكمبيوتر البعيد، وبالتالي تتضمن معالجة أقل عبر المضيفين الذين يتم استخدامهم. بشكل افتراضي، يفترض أن يتم تعريف المتغيرات في الأوامر البعيدة في جلسة العمل البعيدة.
بناء جملة Using هو $Using:.
في المثال التالي، يتم إنشاء المتغير $psفي جلسة العمل المحلية، ولكن يتم استخدامه في جلسة العمل التي يتم فيها تشغيل الأمر. يقوم معدِّل النطاق $Using: بتعريف $ps كمتغير محلي:
$ps = "Windows PowerShell"
Invoke-Command -ComputerName LON-DC1 -ScriptBlock {Get-WinEvent -LogName $Using:ps}
يمكنك أيضاً تطبيق معدِّل النطاق $Using: في PSSessions كما في المثال التالي:
$s = New-PSSession -ComputerName LON-DC1
$ps = "Windows PowerShell"
Invoke-Command -Sessions $s -ScriptBlock {Get-WinEvent -LogName $Using:ps}