الفصل : 11
الجزء : 2
العنوان : ال PowerShell
استيراد Module
ال Module في PowerShell هو تجميع من العناصر التي تكون عادةً متعلقة ببعضها البعض، وتضيف مجموعة من الوظائف الجديدة إلى جلسة PowerShell الخاصة بك. لا يمكن لـ PowerShell أن يحتوي على كل شيء مثبتًا افتراضيًا، أو سيكون ضخمًا! لذلك، يعمل مع مجموعة قياسية من العناصر، وعندما تحتاج إلى العمل مع قطع محددة من التكنولوجيا، مثل Active Directory أو الوصول عن بُعد أو Office 365، هناك Modules تقدمها Microsoft تجلب هذه الوظائف إلى PowerShell. استيراد Module غالبًا ما يمنحك الوصول إلى cmdlets إضافية، ولكنه قد يتضمن أيضًا aliases، متغيرات، assemblies، أو workflows.
ال Active Directory (AD) شائع جدًا، لذا دعنا نلقي نظرة على بعض cmdlets المتعلقة بـ AD ونثبت أن PowerShell لا يعرف ماذا يفعل بها افتراضيًا. بمجرد استيراد Module إلى جلسة PowerShell الخاصة بنا، سنجد المزيد من الوظائف أكثر من ذي قبل. فيما يلي بعض cmdlets المتعلقة بـ Active Directory المفيدة لإدارة AD. هناك العديد من الآخرين المتاحين:
-ال Get-ADDomain – يستعلم عن معلومات حول مجال AD الحالي
-ال Get-ADForest – يستعلم عن معلومات حول غابة AD الحالية
-ال Get-ADUser – يستعلم ويعرض معلومات حول مستخدمي AD وفقًا للمعلمات المحددة. على سبيل المثال، Get-ADUser -Filter 'Name -like "*admin*"'
-ال Get-ADComputer – يستعلم عن معلومات حول أجهزة الكمبيوتر في AD كما هو محدد. على سبيل المثال، لرؤية جميع أجهزة الكمبيوتر المنضمة إلى المجال، استخدم Get-ADComputer -Filter *
-ال Get-ADDefaultDomainPasswordPolicy – يعرض إعدادات سياسة كلمة المرور الحالية من المجال
إذا قمت بتسجيل الدخول إلى وحدة تحكم المجال، وتشغيل PowerShell، ثم تشغيل هذه الأوامر، قد يبدو أنني أكذب عليك لأنها ستعمل بدون استيراد Module! في هذا السيناريو، أنت تغش عن غير قصد لأن Module PowerShell الخاص بـ Active Directory يتم تثبيته عند تثبيت دور AD DS على ذلك الخادم، لذلك الأوامر موجودة بالفعل.
تسجيل الدخول إلى أي خادم آخر ليس وحدة تحكم مجال، ومع ذلك، وتشغيل أي من هذه الأوامر سيقدم لك الكثير من اللاشيء، باستثناء رسائل الخطأ.
دعنا نغير ذلك. عملية تنفيذ Modules PowerShell لأدوار Windows Server بسيطة جدًا، وتوجد في نفس المكان الذي تذهب إليه لتثبيت دور أو ميزة في نظام التشغيل. افتح Server Manager، واستخدم الخيار لإضافة أدوار وميزات. انتقل إلى شاشة الميزات، وهنا ستجد ميزة Windows تسمى Remote Server Administration Tools. قم بتوسيع القائمة المنسدلة لذلك، ثم قم بتوسيع Role Administration Tools. في أعلى هذه القائمة ستجد AD DS و AD LDS Tools، وأخيرًا، مدرج تحت هذه الفئة هو Module Active Directory لـ Windows PowerShell.
بمجرد انتهاء تثبيت هذه الميزة، ستجد أن جميع cmdlets المتعلقة بـ Active Directory الآن تعمل على هذا الخادم الذي ليس وحدة تحكم مجال!
حتى أسهل من المرور عبر معالج التثبيت هذا، يمكنك تحقيق نفس الشيء باستخدام الأمر PowerShell البسيط التالي:
Install-WindowsFeature -Name "RSAT-AD-PowerShell" -IncludeAllSubFeature
استخدام الخط الأنبوبي (Using a pipeline)
بعد الأوامر السابقة التي قمنا بتشغيلها، قد تتساءل لنفسك، "أرى أنه يستخدم ذلك الخط العمودي على المفتاح فوق Enter على لوحة المفاتيح الخاصة بي، ولكن لماذا؟"
سؤال جيد. في Command Prompt، نقوم عمومًا بإصدار أمر واحد في كل مرة. الشيء نفسه غالبًا ما يكون صحيحًا بالنسبة لـ PowerShell عندما نتفاعل معه يدويًا، ولكن في PowerShell، لدينا القدرة على فعل أكثر بكثير. أحد هذه الأمور هو القدرة على إنشاء خط أنبوبي للأوامر. بعبارة أخرى، يمكنك توصيل أو ربط الأوامر معًا. يُشار إلى هذا عادةً بإرسال المعلومات من cmdlet واحد إلى cmdlet آخر ويتم باستخدام ذلك الخط العمودي .
غالبًا ما تُخرج cmdlets البيانات. إذا كنت تريد بعد ذلك استخدام مجموعة البيانات هذه مع cmdlet آخر، فهنا يأتي دور الأنبوب. في أمرنا الأخير، أخبرنا PowerShell بجمع جميع الأوامر التي تحتوي على كلمة Restart بتنفيذ Get-Command -Name *Restart*.
ثم أرسلنا تلك البيانات إلى Format-List. أخذ PowerShell مجموعة البيانات المخرجة وأرسلها إلى Format-List لعرض مجموعة مختلفة من البيانات. يتم استخدام الأنبوب بشكل شائع في أوامر PowerShell. تذكر، عند استخدام الأنبوب، أن المعلمة المحددة تحتاج إلى أن تكون شيئًا يعرف كيفية قبول البيانات التي ترسلها إليها. إذا حاولت يومًا استخدام الأنبوب ولم يعمل، فقد تكون تحاول استخدام صيغة غير مقبولة.
التصدير إلى CSV
طريقة شائعة لاستخدام الأنبوب هي عند جمع المعلومات عبر PowerShell التي تريد الاحتفاظ بها أو توثيقها أو إرسالها لشخص آخر. طريقة شائعة لتخزين البيانات المخرجة هي داخل ملفات CSV، وهي طلب شائع بما يكفي أن Microsoft أضافت cmdlet لهذا الغرض. دعنا نعمل مع cmdlet آخر مفيد، Get-EventLog، ونجمعه مع Export-CSV لإظهار هذه الإمكانية.
سجلات الأحداث هي معلومات أساسية في بيئة Windows Server. يشمل استكشاف المشكلات على الخادم دائمًا خطوة مراجعة سجلات أحداث Windows. هناك بالطبع واجهة رسومية لإنجاز ذلك، ولكن التصفية والبحث داخل تلك الواجهة ليست مفيدة كما ينبغي. بدلاً من ذلك، يمكننا الاعتماد على PowerShell لإخراج معلومات سجل الأحداث، مثل:
Get-EventLog System
كما ترى، تحتوي سجلات أحداث النظام على هذا الخادم على الكثير من المعلومات، وقراءة كل ذلك داخل نافذة PowerShell قد تستغرق السنوات الثلاث القادمة. التصفية والبحث هما المفتاح لجعل هذه البيانات مفيدة، لذا دعنا نرى ما الذي يقوم به هذا بدلاً من ذلك:
Get-EventLog System | Export-CSV C:\Logs\SysLog.csv
أخذ PowerShell جميع المعلومات من سجلات أحداث النظام وأخرج تلك المعلومات إلى ملف CSV لنا. يمكننا الآن أخذ ملف CSV هذا، وفتحه داخل برنامج مثل Microsoft Excel، وفرز، تصفية، أو البحث في هذه الأحداث بطريقة أسهل بكثير مما يمكننا القيام به داخل عارض أحداث Windows الافتراضي.
يمكنك أيضًا التصدير إلى XML أو HTML، أو حتى إرسال البيانات مباشرة إلى طابعة!
الأنابيب يمكنها تنفيذ الأوامر (Pipes can invoke action)
حتى الآن، رأينا الأنابيب فقط تقوم بتعديل البيانات المخرجة. هذا مفيد جدًا، ولكنني لا أريدك أن تعتقد أن الأنابيب مفيدة فقط لتوليد المعلومات. يمكنها أيضًا أخذ البيانات المخرجة من أمر واحد وإرسالها إلى أمر آخر، ولكن ربما أمر يتسبب في إجراء تغيير أو تنفيذ عملية. مثال جيد هو إيقاف عملية أو خدمة. دعنا نتخيل أنك تريد طريقة لإيقاف جميع خدمات Hyper-V على خادم فورًا. جميع تلك الخدمات لديها DisplayName يبدأ بكلمة Hyper-V. يمكننا التحقق من ذلك باستخدام الأمر التالي لعرض جميع تلك الخدمات:
Get-Service -DisplayName hyper*
يمكننا أخذ ناتج هذا الأمر Get-Service وتوصيله إلى Stop-Service، والأمر الناتج سيوقف فورًا جميع الخدمات التي تبدأ بكلمة Hyper:
Get-Service -DisplayName hyper* | Stop-Service
من الواضح أنك ستحتاج إلى الحذر مع هذا الأمر بالذات! سيكون من السهل تعطيل خادم كامل بإيقاف جميع خدماته بأمر صغير واحد.
ال PowerShell Integrated Scripting Environment (ISE)
معظم مديري الخوادم على دراية بمفهوم إنشاء ملفات batch لاستخدامها في Command Prompt. هل لديك سلسلة من الأوامر التي تريد تشغيلها بالتتابع؟ تحتاج إلى تشغيل هذه السلسلة من الأوامر عدة مرات عبر خوادم مختلفة أو بشكل متكرر في المستقبل؟ إدراج أوامر متعددة داخل مستند نصي ثم حفظه بامتداد الملف .BAT سينتج ملف batch يمكن تشغيله على أي جهاز كمبيوتر يعمل بنظام Windows، مما يصدر تلك الأوامر بالتتابع، مما يوفر لك الوقت والجهد في كتابة هذه الأوامر مرارًا وتكرارًا داخل واجهة سطر الأوامر.
البرمجة النصية في PowerShell هي نفس الفكرة ولكنها أكثر قوة. الأوامر في Command Prompt مفيدة ولكن محدودة، بينما cmdlets في PowerShell لديها القدرة على التحكم في أي شيء داخل نظام التشغيل. باستخدام PowerShell، يمكننا الرجوع إلى العناصر من داخل متغيرات البيئة أو السجل، يمكننا بسهولة إصدار الأوامر إلى الأنظمة البعيدة، ويمكننا حتى استخدام المتغيرات داخل برنامج PowerShell النصي، تمامًا كما تفعل مع أي لغة برمجة كاملة.
ملفات PS1
إنشاء ملف .PS1 بسيط (ملف script PowerShell) يستخدم نفس الفكرة تقريبًا لإنشاء ملف .BAT. ببساطة افتح مستند نصي باستخدام محررك المفضل، أدخل سلسلة من الأوامر أو cmdlets، ثم احفظ الملف باسم FILENAME.PS1. طالما أن بيئة PowerShell الخاصة بك تسمح بتشغيل البرامج النصية - راجع الجزء السابق في الفصل حول DEP - لديك الآن القدرة على النقر المزدوج على ذلك الملف .PS1، أو تشغيله من أي موجه PowerShell، لتشغيل سلسلة الأوامر داخل ذلك البرنامج النصي. دعنا نحاول ذلك ونثبت أننا يمكننا الحصول على برنامج نصي بسيط وتشغيله.
نظرًا لأنك ستنشئ برامج نصية تخدم غرضًا ما فقط، دعنا نفكر في مثال حقيقي. أعمل مع خوادم terminal كثيرًا - عفوًا، خوادم RDS - وطلب شائع من العملاء هو سجل للمستخدمين الذين سجلوا الدخول إلى أي الخوادم.
طريقة بسيطة لجمع هذه المعلومات هي إنشاء برنامج نصي لتسجيل الدخول يسجل معلومات حول جلسة المستخدم إلى ملف أثناء تسجيل دخوله. للقيام بذلك، أحتاج إلى إنشاء برنامج نصي يمكنني تكوينه ليعمل أثناء عملية تسجيل الدخول. لجعل البرنامج النصي أكثر إثارة ومرونة في المستقبل، سأستخدم بعض المتغيرات لاسم المستخدم والتاريخ والوقت الحاليين وأسجل اسم خادم RDS الذي يتم تسجيل الدخول إليه. بهذه الطريقة، يمكنني النظر إلى مجموعة السجلات الجماعية لاحقًا وتحديد المستخدمين الذين كانوا على أي الخوادم بسهولة. سأستخدم Notepad لإنشاء هذا البرنامج النصي. لقد فتحت نسخة جديدة من Notepad وأدخلت الأوامر التالية، وأنا أحفظها الآن باسم C:\Scripts\UserReporting.ps1:
يمكنك على الأرجح أن تعرف بالفعل ما الذي يفعله هذا البرنامج النصي، لكن دعنا نستعرضه على أي حال. أولاً، نحن نحدد ثلاثة متغيرات. أنا أخبر البرنامج النصي أن $User يجب أن يساوي متغير البيئة username. هذا سيعطيني اسم المستخدم للشخص الذي يقوم بتسجيل الدخول. $RDSH سيكون اسم الخادم حيث يقوم المستخدم بتسجيل الدخول، أيضًا يتم جلبه من خلال الوصول إلى متغيرات بيئة الخادم. المتغير الثالث المحدد هو $Date، والذي ببساطة يجلب التاريخ الحالي للنظام عن طريق استدعاء cmdlet PowerShell باسم Get-Date.
بعد جلب جميع المعلومات إلى متغيرات PowerShell، أقوم بعد ذلك بإخراج هذه العناصر الثلاثة إلى ملف نصي موجود على محرك الأقراص الصلب للخادم الخاص بي.
إذا قمت بتشغيل هذا البرنامج النصي عدة مرات، يمكنني فتح ملف UserReporting.txt ورؤية أنه في كل مرة يتم فيها تشغيل البرنامج النصي، يقوم بتسجيل المتغيرات المحددة بنجاح في ملف التقرير هذا:
العمل مع PowerShell ISE
إذا كنت صادقًا، فإن تجميع هذا البرنامج النصي البسيط الذي قمنا بتشغيله استغرق بعض التجربة والخطأ. لم يكن لدي نسخة جاهزة للعمل منها، واحتجت إلى اختبار بعض الأسطر بشكل فردي في PowerShell قبل أن أكون واثقًا من أنها ستعمل في برنامجي النصي. أيضًا، حاولت في البداية جلب اسم المستخدم بدون استخدام متغير البيئة، ولم يعمل. لماذا واجهت الكثير من الصعوبة في تجميع بضعة أسطر بسيطة من الشفرة؟ لأنني عندما كتبت تلك الأسطر في Notepad، لم يكن لدي أي فكرة عما إذا كانت ستعمل عندما أحفظ وأحاول تشغيل ذلك البرنامج النصي. كل النص كان مجرد نص أسود على خلفية بيضاء، وكنت أعتمد تمامًا على معرفتي وقدراتي البرمجية لتجميع شيء يعمل بالفعل.
لحسن الحظ، لدينا إمكانية الوصول إلى PowerShell Integrated Scripting Environment (ISE). هذا برنامج يتم تثبيته افتراضيًا في Windows Server 2022؛ إنه غلاف برمجي يسمح لك بكتابة برامج PowerShell النصية ويقدم المساعدة على طول الطريق. دعنا نفتحه. إذا كان لديك أي ملفات PS1 لبرنامج PowerShell النصي، يمكنك ببساطة النقر بزر الماوس الأيمن على أحدها واختيار Edit. وإلا، بالنقر بزر الماوس الأيمن على رمز تطبيق PowerShell (من شريط المهام، على سبيل المثال)، ستجد خيارًا لتشغيل Windows PowerShell ISE مباشرة من تلك القائمة:
الآن، إذا بدأنا في كتابة نفس معلومات البرنامج النصي التي استخدمتها في Notepad قبل بضع دقائق، يمكنك رؤية أنه حتى أثناء الكتابة، نحصل على نوافذ منبثقة ومطالبات تساعدنا في تحديد أي cmdlets أو متغيرات نريد استخدامها. مشابهة للطريقة التي تعمل بها لوحات المفاتيح التلقائية الاكتمال على هواتفنا الذكية، ISE يقدم اقتراحات حول ما الذي تبدأ في كتابته، بحيث لا تحتاج بالضرورة إلى تذكر ما تُسمى cmdlets أو المعلمات؛ يمكنك أن تأخذ تخمينًا متعلمًا على أي حرف تبدأ به ثم تختار واحدًا من القائمة المقدمة. هناك أيضًا قائمة على اليمين بجميع الأوامر المتاحة، وهي قابلة للبحث! هذه ميزة رائعة تساعد حقًا في بدء تشغيل هذه البرامج النصية.
أيضًا مفيد هو شاشة PowerShell الزرقاء الصغيرة التي تستهلك النصف السفلي من نافذة التطوير داخل ISE. بشكل أساسي، عندما تكتب بعض الأوامر، يساعد ISE في التأكد من أنها ستعمل جميعها عن طريق ترميز cmdlets والمعلمات بالألوان لسهولة التعرف عليها، ثم يمكنك النقر على زر السهم الأخضر في شريط المهام المسمى Run Script (F5). حتى إذا لم تحفظ البرنامج النصي في أي مكان حتى الآن، يقوم ISE بتشغيل الأوامر ويقدم الناتج في نافذة موجه PowerShell التالية. هذا يسمح لك باختبار البرنامج النصي الخاص بك، أو اختبار التغييرات التي تجريها على برنامج نصي موجود، دون الحاجة إلى حفظ الملف ثم تشغيله بشكل منفصل من نافذة PowerShell التقليدية:
ما هو أفضل من ذلك هو أنك يمكن أن تبرز أجزاء معينة من البرنامج النصي الخاص بك وتختار تشغيل أجزاء معزولة فقط من الكود. هذا يسمح لك باختبار أجزاء معينة من البرنامج النصي، أو القيام بشيء إبداعي، مثل الاحتفاظ بملف script PS1 كبير مليء بالأوامر الشائعة في PowerShell التي قد تستخدمها يوميًا. عندما تحتاج إلى تشغيل واحد منها فقط، يمكنك ببساطة تمييز النص الذي تريد تشغيله والنقر على زر Run Selection (F8). من خلال تمييز النص قبل تشغيل البرنامج النصي من داخل ISE، سيتم تنفيذ cmdlet(s) المحددة فقط. في لقطة الشاشة التالية، يمكنك رؤية أن لدي العديد من cmdlets المدرجة داخل ملف البرنامج النصي الخاص بي، ولكن فقط الجزء الذي تم تمييزه تم تشغيله عندما ضغطت على F8:
النهاية
نكون هنا انتهينا من الجزء 2 من الفصل 11 تماما من شهادة MCSA المقدمة من Microsoft الأن نغوص في الأعماق
و لا بد وانت تقرا ان تكون مركز جيدا لكل معلومة ومعك ورقة وقلم , لانك بالتاكيد ستحتاجها
واذا واجهتك اي مشكلة في الفهم او ما شابه , يمكنك على الفور الذهاب الى المجتمع الخاص بنا في Telegram للمناقشة والتواصل معنا من هنا
او اذا واجهتك مشكلة في الموقع او تريد اجابة سريعة يمكنك الذهاب الى اخر صفحة في الموقع ستجد صفحة اتصل بنا موجودة يمكنك ارسالة لنا مشكلتك , وسيتم الرد عليها بسرعة جدا ان شاء الله
ويمكنك الأنضمام الى المجتمع Hidden Lock بالكامل مع جميع قنواته للأستفادة في اخر الأخبار في عالم التقنية وايضا الكتب بالمجان والكورسات والمقالات من خلال الرابط التالي لمجموعة القنوات من هنا
يمكنك ايضا متابعتنا في منصات X او Twitter سابقا , لمشاهدة الاخبار والمقالات السريعة والمهمة من
وفقط كان معكم Sparrow اتمنى ان تدعوا لي وتتذكروني في الخير دوما