يحب العديد من الأشخاص استخدام PowerShell لأنه يتيح لهم القيام بأشياء لا يمكن القيام بها باستخدام واجهة المستخدم الرسومية لنظام التشغيل Windows. ومع ذلك، ليس هناك من ينكر أن بعض أوامر PowerShell cmdlets يمكن أن تكون مملة أو معقدة بعض الشيء. ولكن ماذا لو كانت هناك طريقة لتتمكن من تحرير أوامر cmdlets هذه وجعلها "تتصرف" بالطريقة التي تريدها؟ صدق أو لا تصدق، هناك طريقة سهلة للقيام بذلك. يمكنك تغيير سلوك أمر cmdlet عن طريق تعديل قيم معلمات PowerShell الافتراضية. ستوضح لك هذه المقالة كيفية استخدام معلمات PowerShell الافتراضية لتغيير سلوك أمر cmdlet.
تحذير
قبل أن تبدأ، هناك بعض الأشياء التي تحتاج إلى وضعها في الاعتبار. على الرغم من أن تغيير معلمات PowerShell الافتراضية وسلوك cmdelt أمر مناسب، إلا أنه قد يؤدي إلى حدوث مشكلات. إذا قمت بتشغيل برنامج نصي وافترض هذا البرنامج النصي أن الأمر cmdlet المعدل سيتصرف بطريقة معينة، فقد تحصل على نتائج غير متوقعة. لذلك، يجب عليك التأكد من تغيير معلمات PowerShell الافتراضية بعناية.
مراجعة سريعة
هناك مفهومان لـ PowerShell يجب أن تكون على دراية بهما حتى تتمكن من العمل مع المعلمات الافتراضية. المفهوم الأول متغير. في PowerShell، تبدأ أسماء المتغيرات دائمًا بعلامة الدولار، ويمكنك كتابة محتويات المتغير عن طريق كتابة اسم المتغير.
المفهوم الثاني الذي قد تكون على دراية به هو جدول التجزئة. جدول التجزئة هو في الأساس قائمة مكونة من أزواج المفاتيح/القيمة. على سبيل المثال، لنفترض أنك تريد إنشاء جدول تجزئة يحتوي على أسماء الولايات الأمريكية واختصاراتها. أدناه هو الرمز:
$StateList = @{}
$StateList.add('Florida','FL')
$StateList.add('ساوث كارولينا','SC')
$StateList.add('Georgia','GA')
$StateList
ينشئ السطر الأول من التعليمات البرمجية جدول تجزئة فارغًا يسمى $StateList . تضيف الأسطر الثلاثة التالية إدخالات إلى الجدول. يتكون كل إدخال من مفتاح (اسم الحالة) وقيمة (اختصار الحالة). السطر الأخير يسرد محتويات الجدول. يمكنك رؤية الكود قيد التنفيذ في الصورة أدناه.
هذا مجرد مثال بسيط للغاية وهناك العديد من الطرق الأخرى لاستخدام جداول التجزئة.
العمل باستخدام معلمات PowerShell الافتراضية
يحتوي PowerShell على متغير مضمن يستخدم لتخزين المعلمات الافتراضية المستخدمة مع أوامر cmdlets الخاصة به. يُسمى هذا المتغير $PSDefaultParameterValues . كما لاحظت من المقدمة الأولية واسم المتغير، فهذا ليس متغيرًا عاديًا ولكنه جدول تجزئة. ومع ذلك، إذا قمت بإدخال اسم المتغير في PowerShell، فستجد بسرعة أن الجدول فارغ، كما هو موضح أدناه.

إذن ماذا يمكننا أن نفعل مع هذا المتغير $PSDefaultParameterValues . كما ذكر أعلاه، يمكنك التحكم في سلوك PowerShell cmdlets. النقطة الوحيدة هي أنه لا يمكنك التغلب على القدرات الكامنة في أمر cmdlet. لذلك دعونا ننظر إلى مثال.
قد لا يكون هذا المثال شيئًا تريد استخدامه في الحياة الواقعية، ولكنه سيوضح لك مدى سهولة تغيير سلوك الأمر cmdlet بشكل جذري. إذا قمت بإدخال أمر Get-TimeZone cmdlet في PowerShell، فسوف ترى اسم المنطقة الزمنية التي تم تكوين جهاز الكمبيوتر الخاص بك حاليًا لاستخدامها. يمكنك رؤية هذا المثال في الصورة أدناه.
![كيفية استخدام معلمات PowerShell الافتراضية لتغيير سلوك الأمر كيفية استخدام معلمات PowerShell الافتراضية لتغيير سلوك الأمر]()
نقوم الآن بتغيير أمر cmdlet هذا بحيث لا يعرض المنطقة الزمنية التي تم تكوين النظام لاستخدامها، ولكن بدلاً من ذلك يعرض المناطق الزمنية المتاحة. للقيام بذلك، نحتاج إلى بناء جملة cmdlet باستخدام أمر Get-Help cmdlet متبوعًا بأمر Get-TimeZone cmdlet . يمكنك رؤية بناء جملة الأمر cmdlet أدناه.
![كيفية استخدام معلمات PowerShell الافتراضية لتغيير سلوك الأمر كيفية استخدام معلمات PowerShell الافتراضية لتغيير سلوك الأمر]()
يتضمن بناء الجملة هذا معلمة تسمى ListAvailable . أدخل الأمر أدناه:
$PSDefaultParameterValues.Add("Get-TimeZone:ListAvailable",$True)
يخبر الجزء الأول من هذا الأمر PowerShell ببساطة أنك تريد إضافة قيمة إلى جدول التجزئة، تمامًا كما فعلنا مع مثال اختصار الولاية الأمريكية في القسم السابق. يحتوي جدول التجزئة هذا على زوج المفتاح/القيمة. في هذه الحالة، المفتاح هو اسم الأمر cmdlet (Get-TimeZone) متبوعًا بفاصلة واسم المعلمة التي تريد تعيينها. في هذه الحالة، اسم المعلمة هو ListAvailable. الجزء الثاني من أمر cmdlet هذا هو القيمة التي تريد تعيينها للمعلمة. هنا $صحيح . لا تحتاج المعلمة ListAvailable عادةً إلى قيمة، لذا فإن تحديد $True هو الطريقة التي تخبر بها PowerShell باستخدام هذه المعلمة دون تعيين قيمة لها.
إذا نظرت إلى الصورة أدناه، سترى ما يحدث عند تشغيل أمر Get-TimeZone cmdlet.
![كيفية استخدام معلمات PowerShell الافتراضية لتغيير سلوك الأمر كيفية استخدام معلمات PowerShell الافتراضية لتغيير سلوك الأمر]()
أشياء لتأخذها بالحسبان
أهم شيء يجب فهمه هو أن إضافة قيمة جديدة لمعلمة PowerShell الافتراضية يؤدي إلى تغيير السلوك الافتراضي لأمر cmdlet، وليس إزالة إمكانيات أمر cmdlet. حتى عند تغيير أمر Get-TimeZone cmdlet لإظهار المناطق الزمنية المتاحة بدلاً من إظهار المنطقة الزمنية الحالية. لا يزال بإمكانك عرض معلومات المنطقة الزمنية الحالية إذا عرضت المزيد.
شيء آخر تحتاج إلى معرفته هو أنه يمكن إزالة المعلمات الافتراضية المخصصة. لإزالة عنصر واحد، استخدم الأمر $PSDefaultParameterValues.Remove ، متبوعًا باسم العنصر الذي تريد إزالته. على سبيل المثال:
$PSDefaultParameterValues.Remove("Get-TimeZone:ListAvailable")
بدلاً من ذلك، يمكنك حذف محتويات جدول التجزئة بالكامل باستخدام هذا الأمر:
$PSDefaultParameterValues.Clear();
يمكنك رؤية أمثلة لكلا التقنيتين أدناه:
![كيفية استخدام معلمات PowerShell الافتراضية لتغيير سلوك الأمر كيفية استخدام معلمات PowerShell الافتراضية لتغيير سلوك الأمر]()
يمكنك حذف جدول التجزئة بأكمله أو حذف إدخال واحد.
يعد تغيير السلوك الافتراضي لأمر cmdlet أمرًا لا تفعله غالبًا، ولكن عندما تحتاج إليه، فأنت تعرف بالفعل كيفية تغييره.
أتمنى لك النجاح!
شاهد المزيد: