شهادة MCSA الفصل 11 : ال PowerShell الجزء 1

sparrow
0

 



الفصل : 11

الجزء : 1

العنوان : ال PowerShell





إذا كنت قد استخدمت Windows 11 مؤخرًا، فقد تتساءل: "لماذا نتحدث عن PowerShell بينما تم استبداله بـ Windows Terminal؟" إن "استبدال" PowerShell بـ Windows Terminal في Windows 11 يسبب بعض الارتباك بين المستخدمين، ولكن في الواقع، هما ليسا نفس الشيء على الإطلاق، كما أن Terminal ليس بديلاً فعليًا لـ PowerShell. ال PowerShell أكثر بكثير من مجرد شاشة وحدة تحكم لتشغيل الأوامر. إنه متكامل في جميع جوانب Windows نفسه. سنناقش Windows Terminal بشكل أكثر في نهاية هذا الفصل، وسنقوم فعليًا بشرح خطوات تثبيته داخل Windows Server 2022 (لأنه غير موجود بشكل افتراضي). ولكن لأغراض تعلم PowerShell، يمكننا بأمان ترك Terminal خارج النطاق.


حتى الآن، كنا نتحدث عن PowerShell وTerminal، ولكن لنكن صادقين، الكثير منا لا يزال يستخدم Command Prompt بشكل يومي. إذا كنت قد انتقلت إلى استخدام PowerShell كموجه شامل بديلاً عن Command Prompt، فأنت تستحق التحية! أما أنا، فأنا لا أزال أستخدم مزيجًا جيدًا من الاثنين، وأميل إلى فتح cmd.exe كعادة من الكسل. تعديل هذا السلوك في نفسي هو جزء مما آمل تحقيقه مع هذا الفصل، وسنستكشف بعض الأسباب التي تجعلك تفعل ذلك أيضًا. PowerShell أكثر فائدة وقوة مما كان يمكن أن يكون عليه Command Prompt.


في هذا الفصل، سنغطي المواضيع التالية:


لماذا الانتقال إلى PowerShell؟

العمل داخل PowerShell

استيراد وحدة (Importing a module)

استخدام الأنابيب (pipeline)

بيئة البرمجة المتكاملة لـ PowerShell

إدارة الخادم عن بعد

تكوين الحالة المطلوبة (Desired State Configuration)

ال Windows Terminal


لماذا الانتقال إلى PowerShell؟


لا أعتقد أن هناك أي سؤال في أذهان الناس حول أن PowerShell هو بالفعل التطور الطبيعي لـ Command Prompt، لكن السبب الذي يجعل الكثير منا لا يزالون يعتمدون على الواجهة القديمة هو أنها تحتوي على جميع الوظائف اللازمة لإنجاز ما كنا نحتاجه تقليديًا على خوادمنا. ما يحتويه Command Prompt حقًا هو القدرة على القيام بالأشياء نفسها التي كنا نقوم بها دائمًا من خلال Command Prompt، ولا شيء غير ذلك. دون إدراك ذلك، هناك الكثير من الوظائف التي تستخدم فيها واجهة المستخدم الرسومية ولا يمكن إنجازها جيدًا من خلال نافذة Command Prompt.


القيود الموجودة في Command Prompt التي تجبرك على استخدام الفأرة للتفاعل مع واجهة المستخدم الرسومية لا توجد في PowerShell. إنه شامل تمامًا وقادر على تعديل تقريبًا أي جانب من جوانب نظام التشغيل Windows. كيف أصبح PowerShell أكثر قوة من Command Prompt؟ يختلف عن أي قشرة I/O كلاسيكية في أنه مبني على .NET ويعمل أكثر مثل لغة برمجة منه إلى أوامر إدخال وإخراج بسيطة.


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


ال Cmdlets


معظم الوظائف التي يستخدمها المسؤول التقليدي داخل PowerShell تأتي على شكل cmdlets (تنطق command-lets). هذه هي الأوامر التي تقوم بتشغيلها داخل موجه PowerShell، لكن يمكنك التفكير فيها كأدوات بدلاً من أوامر بسيطة. يمكن استخدام cmdlets للحصول على المعلومات من الخادم أو ضبط المعلومات والمعايير على الخادم. تحتوي العديد من cmdlets على أسماء بديهية تبدأ بـ get أو set، ومثلما هو الحال في معظم واجهات سطر الأوامر، يحتوي كل cmdlet على مفاتيح أو متغيرات يمكن تكوينها وإرفاقها في نهاية cmdlet لجعله يقوم بأشياء خاصة. من المفيد فهم أن cmdlets يتم بناؤها دائمًا باستخدام صيغة الفعل-الاسم. تحدد الفعل الذي تريد تحقيقه، مثل get أو set، ثم الاسم هو الجزء داخل Windows الذي تحاول التلاعب به. إليك بعض الأمثلة البسيطة لـ cmdlets في PowerShell لتوضيح كيف تبدو وكيف تُسمى بطريقة بسيطة إلى حد ما:


الGet-NetIPAddress: باستخدام هذا cmdlet، يمكننا رؤية عناوين IP على نظامنا.

الSet-NetIPAddress: يمكننا استخدامه لتعديل عنوان IP موجود.

الNew-NetIPAddress: يسمح لنا هذا cmdlet بإنشاء عنوان IP جديد على الكمبيوتر.

الRename-Computer: كما رأينا سابقًا في الكتاب، Rename-Computer هو طريقة سريعة وسهلة لتعيين اسم المضيف للكمبيوتر.


إذا كنت تكافح في تذكر اسم أو صيغة أمر معين، فإن منصة Microsoft Learn (المعروفة سابقًا وأحيانًا لا تزال تُدعى Microsoft Docs أو Microsoft TechNet) تحتوي على صفحة كاملة من المعلومات المخصصة لكل cmdlet داخل PowerShell. يمكن أن يكون هذا مفيدًا بشكل لا يصدق، ولكن في بعض الأحيان لا تريد أن تأخذ الوقت للبحث على الإنترنت فقط للعثور على اسم أمر تنساه في اللحظة.


أحد أكثر cmdlets فائدة في PowerShell يظهر لك قائمة بجميع cmdlets المتاحة. تذكر أسماء cmdlets ليس مهمًا بشكل حاسم، طالما أنك تلتزم بتذكر هذا واحد، Get-Command:


واو، هناك صفحات وصفحات وصفحات من cmdlets! بدلاً من التمرير خلال القائمة بأكملها للعثور على ما تبحث عنه، من السهل تصفية هذه القائمة بناءً على أي معايير ترغب بها. إذا كنا مهتمين برؤية الأوامر التي تتعامل مع عناوين IP فقط، يمكننا تجربة هذا:

Get-Command -Name IPAddress


يتيح لك cmdlet Get-Command بالاقتران مع المعامل -Name البحث الانتقائي عن العناصر المفيدة في PowerShell التي تتعلق بأي اسم أو جزء من اسم.


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


ال PowerShell هو العمود الفقري


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

عندما بدأت في استخدام PowerShell، كنت أميل إلى القيام بذلك طوال الوقت. ولكن كلما استخدمت PowerShell، وكلما بدأت في البحث في تلك الواجهات الرسومية نفسها، أدركت أكثر أنني لست الوحيد الذي يستخدم PowerShell. الكثير من أدوات الإدارة الرسومية تستخدم PowerShell أيضًا! دون أن تدرك ذلك، تستخدم PowerShell للعديد من المهام المدفوعة رسوميًا داخل نظام التشغيل Windows Server. عندما تفتح تلك وحدة الإدارة لما تصادف تغييره على الخادم، وتقوم بإعداداتك، ثم تضغط على زر Go أو Finish، كيف تضع تلك الوحدة الرسومية تكوينك في مكانه؟ باستخدام PowerShell. خلف الكواليس، في الخلفية، تأخذ وحدة التحكم المعلومات التي أدخلتها، وتضع تلك المعلومات في cmdlets PowerShell، وتشغيلها لإجراء العمل الفعلي.


الكثير من أدوات الإدارة التي نشغلها من داخل Server Manager تأخذ هذا النهج، وتقبل التغييرات والتكوينات منك ثم تصوغ تلك الإعدادات في أوامر PowerShell التي تعمل في الخلفية لدفع التغييرات إلى التنفيذ.


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


البرمجة النصية (Scripting)


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


ال Server Core


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


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


العمل داخل PowerShell


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


سنكون نعمل، طوال هذا الفصل، داخل إصدار PowerShell الذي يأتي افتراضيًا مع Windows Server 2022، وهو PowerShell 5.1. قد تكون سمعت أخبار إطلاق PowerShell 7. إذا كنت مألوفًا بهذا وتستخدمه بالفعل، فكل ما نناقشه سيعمل بشكل جيد على تلك المنصة المحدثة. لإدارة مثيل Windows Server، لن يكون للاختلافات بين الإصدارات تأثير كبير. تثبيت PowerShell 7 لن يقوم بتحديث PowerShell 5.1، بل سيعملان جنبًا إلى جنب. هذا جزئيًا لأن PowerShell 5.1 مبني على .NET Framework، بينما PowerShell 7.x يعمل على .NET Core. وجود الأساسات في .NET Core المفتوحة المصدر يعني أن PowerShell 7 يأتي مع القدرة على العمل عبر الأنظمة، مع Windows، وLinux، وحتى macOS (مفاجأة!). كما يتضمن دعمًا إضافيًا للعمل مع حاويات Docker. إذا كنت ترغب في البحث عن وتثبيت PowerShell 7، هناك مجموعة متنوعة من الطرق المختلفة التي يمكنك القيام بها. المقالة التالية من Microsoft توضحها جميعًا:

https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershellon-windows?view=powershell-7.3


بالنسبة لأولئك الذين يتبعون مسار تثبيت PowerShell 7، تذكر أن هذا shell منفصل تمامًا عن PowerShell "العادي"، ويتم تشغيله بواسطة ملف تنفيذي مختلف. قد يكون هذا مرجعًا سريعًا مفيدًا لضمان أنك تقوم بتشغيل shell الذي تقصده:


PowerShell 5.1 = powershell.exe

PowerShell 7 = pwsh.exe


تشغيل PowerShell


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


لأنني أميل إلى تفضيل استخدام لوحة المفاتيح لكل شيء، الطريقة التي أفتح بها PowerShell عادة هي الضغط باستمرار على مفتاح Windows والضغط على R لفتح موجه تشغيل، ثم كتابة الكلمة powershell، والضغط على Enter:


كما ترى، بما أنني مسجل الدخول إلى حساب إداري على خادمي، فإن موجه PowerShell قد تم فتحه بامتيازات مرتفعة. كلمة Administrator مدرجة في شريط الأدوات العلوي لنافذة PowerShell. من المهم أن نلاحظ أنه، مثل Command Prompt، يمكنك فتح موجه PowerShell بامتيازات مستخدم عادية أو امتيازات مسؤول مرتفعة. من الأمان بشكل عام العمل من داخل جلسة PowerShell عادية لا تحتوي على حقوق مرتفعة إلا إذا كانت المهمة التي تحاول إنجازها تتطلب تلك الامتيازات الإضافية.


طريقة سريعة وسهلة أخرى لفتح PowerShell على أي منصة Windows جديدة هي بالنقر بزر الماوس الأيمن على زر ابدأ واختيارها مباشرة من قائمة المهام السريعة التي تظهر. كما ترى في الشكل 11.4، لقد نقرت بزر الماوس الأيمن على زر ابدأ لأحد أجهزة Server 2022 الجديدة الخاصة بي ويمكنني الاختيار من هنا لفتح PowerShell أو حتى موجه PowerShell المرتفع (الإداري):


إذا قمت بالنقر بزر الماوس الأيمن على زر ابدأ ولم تجد خيارات لـ PowerShell بل لفتح Command Prompt، فلا تيأس. هذه خيار قابل للتكوين؛ يمكنك إظهار خيارات Command Prompt أو PowerShell في قائمة المهام الإدارية السريعة. إذا نقرت بزر الماوس الأيمن على شريط المهام واخترت إعدادات شريط المهام، ستجد خيارًا يسمى

Replace Command Prompt with Windows PowerShell in the menu when I right-click the Start button or press Windows key + X.


واو، هذا ربما يكون أطول اسم لخيار واحد في نظام التشغيل Windows بأكمله، ولكن تبديل هذا الخيار سيغير قائمتك السريعة الإدارية بين واجهات سطر الأوامر.


لديك أيضًا خيار الدخول إلى موجه PowerShell من داخل نافذة Command Prompt موجودة بالفعل. عادة، عندما تعمل من Command Prompt، لا يمكنك استخدام أي من cmdlets الخاصة بـ PowerShell. دعنا نحاول هذا. افتح نافذة Command Prompt إدارية وحاول كتابة اسم أحد cmdlets الذي ذكرناه سابقًا. ربما تكتب Get-NetIPAddress لعرض عناوين IP الموجودة على هذا النظام. أوبس - هذا فشل لأن Command Prompt لا يتعرف على cmdlet Get-NetIPAddress.


الآن اكتب كلمة powershell واضغط Enter. بدلاً من فتح نافذة PowerShell منفصلة، يتغير موجهك، ولكن تظل نافذة التطبيق نفسها كما هي. لقد دخلت الآن إلى shell PowerShell من داخل نافذة Command Prompt التقليدية، ويمكنك بدء استخدام cmdlets كما تشاء. تشغيل Get-NetIPAddress الآن ينتج بعض المعلومات:


يمكنك التحرك من وضع PowerShell مرة أخرى إلى وضع Command Prompt العادي بكتابة exit.


سياسة التنفيذ الافتراضية (Default execution policy)


عندما تعمل مباشرة مع واجهة سطر الأوامر في PowerShell، يمكنك ببساطة فتح PowerShell وبدء كتابة cmdlets والقيام بالعمل. ولكن، واحدة من أكبر فوائد استخدام PowerShell تأتي عندما تبدأ في إنشاء، وحفظ، وتشغيل السكربتات. عند إنشاء وتشغيل سكربت PowerShell لأول مرة، قد تجد أنه يفشل برسالة خطأ كبيرة وغير مفهومة، مثل هذه:



هذا لا ينبغي أن يحدث على نسخة جديدة من Windows Server 2022 ولكن قد يحدث إذا كان لديك أي سياسات GPO يتم تطبيقها على الخادم الجديد أو إذا كنت تستخدم نظام تشغيل مختلف وتحاول تشغيل بعض سكربتات PowerShell؛ قد تجد نفسك عالقًا مع واحدة من هذه الرسائل الخطأ مباشرة. بينما تعتبر طبيعة بعض إصدارات Windows التي تمنع تشغيل السكربتات بشكل افتراضي تعزيزًا أمنيًا، يمكن أن تكون عائقًا عندما تحاول إنجاز شيء ما. لحسن الحظ، إذا واجهت هذه المشكلة، فالحل سهل: ببساطة تحتاج إلى ضبط Default Execution Policy (DEP) داخل PowerShell بحيث يسمح بتنفيذ السكربتات بشكل صحيح.


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


ال Restricted


سياسة Restricted تسمح بتنفيذ الأوامر الفردية وcmdlets فقط، ولكن تمنع تشغيل السكربتات تمامًا.


ال AllSigned


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


ال RemoteSigned


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


ال Unrestricted


السكربتات مسموح لها بالتشغيل، سواء كانت موقعة أم لا. لا يزال يتم إعطاؤك تحذير عند تشغيل سكربتات تم تحميلها من الإنترنت.


ال Bypass mode


في وضع Bypass، لا يتم حظر أي شيء ولا يتم إعطاء تحذيرات عند تشغيل السكربتات. بمعنى آخر، أنت بمفردك.


في بعض الأحيان، قد لا تلبي سياسة تنفيذ واحدة جميع احتياجاتك، اعتمادًا على كيفية استخدامك لسكربتات PowerShell. يمكن تحسين DEP بشكل أكبر من خلال ضبط نطاق سياسة التنفيذ بحيث يمكنك تعيين سياسات تنفيذ مختلفة لجوانب مختلفة من النظام. على سبيل المثال، النطاقات الثلاثة التي يمكنك تعديلها هي Process، CurrentUser، وLocalMachine. بشكل افتراضي، تؤثر DEP على LocalMachine بحيث تتبع أي سكربتات تعمل سياسة DEP. ولكن إذا كنت بحاجة إلى تعديل هذا السلوك بحيث يتم تعيين سياسات DEP مختلفة لـ CurrentUser أو حتى عملية فردية، لديك القدرة على ذلك.


إذا كنت غير متأكد من حالة DEP الحالية الخاصة بك أو تشك في أن شخصًا ما قد قام بتغييرها، يمكنك بسهولة عرض سياسة التنفيذ المعينة حاليًا باستخدام cmdlet بسيطة تسمى Get-ExecutionPolicy. كما ترى في الشكل 11.7، تم ضبط السياسة الخاصة بي على Restricted، مما يفسر رسالة الخطأ التي ظهرت لي عندما حاولت تشغيل سكربت:


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


Set-ExecutionPolicy RemoteSigned



تذكر، نحن الآن نقوم بتشغيل PowerShell على هذا النظام المحلي (لقد قمت بتسجيل الدخول إلى خادم WEB3 الخاص بي)، لذا فإن سياسة التنفيذ الوحيدة التي أقوم بضبطها هي السياسة المحلية لنظام WEB3 الخاص بي. إذا كنت أريد تغيير هذا الإعداد عالميًا أو لمجموعة من الأجهزة في نفس الوقت، يمكنني استخدام Group Policy لهذا التغيير. الموقع داخل Group Policy لتكوين سياسة تنفيذ سكربتات PowerShell هو:


Computer Configuration | Policies | Administrative Templates | Windows Components | Windows PowerShell | Turn on script execution.



استخدام مفتاح Tab


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


إذا كتبنا get-co ثم ضغطنا على Tab، سيتم ملء موجه PowerShell تلقائيًا بـ cmdlet الكاملة Get-Command. نظرًا لأن هناك العديد من cmdlets التي تبدأ بـ get-co، إذا ضغطت على Tab عدة مرات، سترى أنه يتنقل عبر جميع cmdlets المتاحة التي تبدأ بتلك الأحرف.


مفتاح Tab يعمل أيضًا مع أسماء الملفات والمجلدات. على سبيل المثال، لنقل أنني قمت بتنزيل hotfix يحتاج إلى التثبيت على خادم. أريد تشغيل هذا hotfix باستخدام موجه PowerShell الذي فتحته بالفعل، ولكن لا أريد قضاء دقيقة أو أكثر في محاولة كتابة اسم الملف الضخم لهذا hotfix. لقد انتقلت بالفعل إلى المجلد حيث يوجد hotfix الخاص بي، والآن إذا كتبت فقط الأحرف الأولى من اسم الملف وضغطت على مفتاح Tab، سيقوم PowerShell بملء باقي اسم الملف. من هناك، كل ما أحتاج إلى فعله هو الضغط على Enter لتشغيل المثبت. في لقطة الشاشة أدناه، انتقلت إلى مجلد Hotfixes ثم كتبت الحرف a وضغطت على Tab لتوليد التالي:


ال Cmdlets مفيدة للمهام اليومية


عندما بدأت في تضمين PowerShell في سير العمل اليومي الخاص بي، وجدت أنه من المفيد الاحتفاظ بقائمة بالأوامر والـ cmdlets الشائعة الاستخدام في متناول اليد. حتى تصل إلى النقطة التي تصبح فيها محفوظة وطبيعية، إذا لم يكن لديك طريقة سريعة وسهلة لاستدعاء تلك الأوامر، فإنك على الأرجح لن تستخدمها وستعود إلى الطريقة القديمة في تكوين الخوادم الخاصة بك.


هنا قائمة ببعض العناصر التي أستخدمها بانتظام عند بناء أو استكشاف أخطاء الخوادم:

-ال **Get-Command**: هذا مفيد للعثور على أوامر أو cmdlets إضافية قد ترغب في تشغيلها أو البحث عنها.

-ال **Get-Command -Name *example***: يعزز فائدة Get-Command بإضافة مفتاح -Name إلى نهايته، بحيث يمكنك تصفية النتائج لأي نوع من الـ cmdlets التي تبحث عنها.


- ال**GCM**: هذا هو مجرد اختصار لـ Get-Command. أردت فقط الإشارة إلى هذا لأن العديد من cmdlets في PowerShell لها اختصارات، مثل gcm، التي تسمح لك بتشغيل هذه الـ cmdlets الشائعة الاستخدام بعدد أقل من ضربات المفاتيح.


-ال **Get-Alias**: بما أننا ذكرنا اختصار gcm لـ Get-Command، قد تتساءل عن الاختصارات الأخرى المتاحة داخل PowerShell. لرؤية قائمة كاملة، ببساطة استخدم cmdlet Get-Alias. استخدام الاختصارات بدلاً من الأسماء الكاملة للـ cmdlets يمكن أن يقلل بشكل كبير من عدد الأحرف التي تكتبها داخل PowerShell.


-ال **Rename-Computer**: يتيح لك تعيين اسم جديد للخادم.


- ال**Add-Computer**: استخدم cmdlet Add-Computer للانضمام إلى الخوادم أو الأجهزة إلى نطاق.


-ال **hostname**: يعرض اسم النظام الذي تعمل عليه حاليًا. أستخدم hostname طوال الوقت للتأكد من أنني أعمل حقًا على الخادم الذي أعتقد أنني أعمل عليه. هل سبق لك أن قمت بإعادة تشغيل الخادم الخطأ؟ أنا فعلت. عن طريق تشغيل أمر hostname سريع قبل إصدار أمر إعادة التشغيل، يمكنك الحصول على راحة البال بأن الوظيفة التي توشك على أدائها تحدث بالفعل على النظام الصحيح.


-ال **$env:computername**: هذا يعرض أيضًا اسم النظام الذي تعمل عليه، لكنني أشير إليه لإظهار أن PowerShell يمكنه بسهولة الوصول إلى متغيرات البيئة الخاصة بك لسحب المعلومات. أمر hostname الأبسط مفيد عندما تكون مسجلًا الدخول إلى نظام محلي وتحاول فقط التحقق من اسمه، ولكن القدرة على سحب المعلومات من متغير مثل $env:computername ستكون أكثر فائدة عند إنشاء سكربتات أو محاولة تنفيذ وظيفة ضد نظام بعيد.


- ال**Get-ComputerInfo -Property csname** : ال cmdlet اللي اسمه Get-ComputerInfo يخرج كميات كبيرة من المعلومات حول نظامك، ووسط هذا الخروج ستجد اسم الكمبيوتر أو الخادم. إذا كنت تريد استخدام cmdlet حقيقية للعثور على اسم خادمك بدلاً من أمر تقليدي أو متغير بيئة، فهذا هو جوابك. أضفت -Property csname إلى هذه الـ cmdlet لأن إضافة هذا التحديد سيخرج فقط اسم الكمبيوتر.


- ال**Logoff**: الاسم يشرح نفسه؛ Logoff يقوم ببساطة بتسجيل الخروج من النظام. بدلاً من محاولة العثور على وظيفة Sign out عن طريق النقر داخل قائمة ابدأ في الخادم الخاص بك (التي تحمل معها إمكانية حقيقية جدًا للنقر عن طريق الخطأ على Restart)، يمكنك إدخال أمر Logoff سريع في إما Command Prompt أو نافذة PowerShell، وسيتم تسجيل خروجك من هذا الخادم فورًا. أستخدم هذا طوال الوقت عند إغلاق اتصالات RDP.

-ال **Install-WindowsFeature**: استخدم PowerShell لتبسيط إضافة الأدوار أو الميزات الجديدة على خوادمك.


كل من shutdown وRestart-Computer مفيدان لإيقاف أو إعادة تشغيل خادم. على جهازي الخاص، عادةً ما تسبق هذه الأوامر أمر hostname. عند إعادة تشغيل خادم، يجب أن تأخذ عناية خاصة بأنك تعيد تشغيل الجهاز الصحيح، لذا أجد أنه من الأفضل فتح موجه PowerShell، إجراء فحص سريع بالـ hostname، ثم تشغيل أمر إعادة التشغيل من هذا الموجه نفسه. هذا يضمن أنني أعيد تشغيل الخادم الذي تم إرجاعه في خرج hostname.


shutdown /r /t 0


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


في الأمر السابق، أخبرت أمر shutdown أنني أريد إعادة التشغيل بدلاً من الإيقاف؛ هذا ما يفعله /r. كما أخبرته بالانتظار صفر ثوانٍ قبل تنفيذ هذه الإعادة للتشغيل. بهذه الطريقة، يحدث ذلك فورًا؛ لا أضطر للانتظار لهذا المؤقت الافتراضي البالغ 60 ثانية.


نصيحة احترافية:

جرب اللعب بـ shutdown /i. المفتاح الخاص /i يعرض واجهة رسومية من خلالها يمكنك اختيار خيارات متنوعة وإبهار أصدقائك في IT!

 


الاستعلام عن المستخدم أو quser


يُعتبر أمر quser مفيدًا بشكل كبير في بيئات RDS، حيث يعرض جميع المستخدمين الذين تم تسجيل دخولهم حاليًا إلى السيرفر، بما في ذلك إحصائيات حول ما إذا كانوا متصلين محليًا أو عن بُعد، ومدة نشاط جلستهم. أنا أستخدم quser عادةً لاكتشاف جلسات RDS التي كانت خاملة لفترة طويلة، حتى أتمكن من إنهاء تلك الجلسات وتحرير الموارد على السيرفر:



quser /server:WEB1



استخدام quser مع المفتاح /server يسمح لك برؤية المستخدمين المتصلين حاليًا على نظام بعيد. بهذه الطريقة، يمكنك البقاء متصلاً بسيرفر واحد في مزرعة RDS الخاصة بك ولكن يمكنك التحقق من جلسات المستخدمين لجميع الأنظمة الخاصة بك دون الحاجة إلى تسجيل الدخول إليها. يمكنك حتى كتابة برنامج نصي يقوم بتشغيل هذا الأمر على كل من سيرفرات المضيف للجلسات الخاصة بك ويخرج البيانات إلى ملف. يمكن بعد ذلك تشغيل هذا الخرج على جدول زمني واستخدامه كآلية للإبلاغ لمتابعة المستخدمين الذين كانوا متصلين بأي سيرفر مضيف لجلسات RDS في أي وقت.


أوامر cmdlets لتعيين IP


عندما بنينا نسخة Server Core معًا في وقت سابق من هذا الكتاب، استخدمنا أداة Sconfig لتعريف عنوان IP لهذا السيرفر. في حين كانت تلك طريقة سريعة وسهلة لإنجاز هذه المهمة، دعونا نحدد أوامر PowerShell cmdlets التي تُستخدم لتكوين معلومات عنوان IP على NIC السيرفر:



New-NetIPAddress -InterfaceIndex 12 -IPAddress 10.10.10.40 -PrefixLength 24 -DefaultGateway 10.10.10.1



الأمر أعلاه هو مجرد مثال مع بعض الأرقام العشوائية؛ النقطة هنا هي أننا يمكننا استخدام New-NetIPAddress لتعيين عناوين IP إلى NICs على سيرفراتنا، والصيغة أعلاه هي الطريقة الصحيحة للقيام بذلك.


يُستخدم غالبًا مع New-NetIPAddress، استخدم الأمر التالي لتعيين عناوين DNS server في خصائص NIC الخاصة بك:

Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses 10.10.10.2,10.10.10.3



استخدام Get-Help


كم مرة استخدمت مفتاح /? في Command Prompt للحصول على معلومات إضافية حول أمر تريد تشغيله؟ المعلومات الإضافية المقدمة من وظيفة المساعدة هذه يمكن أن تعني الفرق بين كون الأمر مفيدًا أو عديم الفائدة تمامًا. أوامر PowerShell cmdlets لديها وظيفة مساعدة مشابهة، ولكن لا يمكنك ببساطة إضافة /? في نهاية cmdlet في PowerShell لأن المسافة التي تلي cmdlet في PowerShell تشير إلى أنك على وشك تحديد معلمة لاستخدامها مع هذا cmdlet. على سبيل المثال، إذا حاولنا استخدام /? مع cmdlet Restart-Computer للعثور على مزيد من المعلومات حول كيفية استخدام Restart-Computer، فلن يتمكن من التعرف على علامة الاستفهام كمعلمة صالحة، وسيكون ناتجنا كالتالي:


بدلاً من ذلك، هناك وظيفة مساعدة أكثر قوة داخل PowerShell. ال Get-Help هو cmdlet بحد ذاته، وكأي cmdlet، نحتاج إلى استخدام المعلمات التالية للcmdlet لتحديد وجلب المعلومات التي نبحث عنها. لذا بدلاً من استخدام Get-Help في نهاية الأمر، كما كنا نفعل مع علامة الاستفهام، نستخدمه ككيان منفصل.


تشغيل Get-Help بمفرده يعطينا المزيد من المعلومات حول أمر Get-Help، والتي قد تكون مفيدة للاطلاع عليها، ولكننا الآن نهتم أكثر بمعرفة كيفية استخدام Get-Help لتزويدنا بمعلومات إضافية عن cmdlet نريد تشغيله، مثل وظيفة Restart-Computer.


ما نحتاج إلى فعله هو استخدام Get-Help كـ cmdlet، ثم تحديد cmdlet الآخر كمعلمة لتمريرها إلى Get-Help بوضع مسافة بينهما:


Get-Help Restart-Computer


المعلومات المقدمة من Get-Help شاملة للغاية؛ في بعض الحالات، تحتوي على جميع المعلومات التي يمكنك العثور عليها في Microsoft Learn. استخدام Get-Help هو طريقة سريعة للعثور على أمثلة الصيغة للأوامر وcmdlets التي قد تكون غير مألوفة لديك، وتجنب الحاجة إلى فتح متصفح الويب للعثور على تلك المعلومات. تأكد من البدء في استخدام Get-Help لتعزيز معرفتك بأي cmdlet في PowerShell!


عند استخدام PowerShell على نظام جديد، أو نظام لم تعمل عليه منذ فترة، خذ دقيقة لتشغيل أمر يسمى Update-Help. سيؤدي ذلك إلى جعل PowerShell يصل إلى Microsoft وتنزيل أحدث إصدارات ملفات المساعدة، حتى تعرف أنك تعرض أحدث المعلومات عند استخدام Get-Help.


تنسيق الناتج


عند البحث عن المعلومات في PowerShell، أواجه غالبًا حالات يتم فيها تقديم الكثير من المعلومات لي لدرجة يصعب معها الفرز خلالها. هل تحاول العثور على cmdlets مفيدة من Get-Command، أو ربما تتبع اسم مستعار معين مع Get-Alias؟ يمكن أن يكون الناتج من هذه cmdlets طويلاً بشكل مذهل. بينما ناقشنا بعض المعلمات التي يمكنك استخدامها لتقليل هذا الناتج، مثل تحديد معلمات -Name معينة، هناك بعض معلمات التنسيق التي يمكن أيضًا إضافتها إلى cmdlets، من أجل تعديل ناتج البيانات.


ال Format-Table


الغرض من Format-Table بسيط: يأخذ ناتج البيانات من أمر ما ويضعه في تنسيق جدول. هذا يجعل المعلومات عادةً أسهل في القراءة والعمل معها. دعونا نلقي نظرة على مثال. لقد استخدمنا Get-NetIPAddress عدة مرات، لكن لنكن صادقين، ناتجها فوضوي بعض الشيء. تشغيل cmdlet بمفرده على سيرفري الافتراضي، الذي لديه فقط NIC واحد معين له، ينتج عنه أربع صفحات من البيانات داخل نافذة PowerShell الخاصة بي، مع جميع أنواع الحقول المعلوماتية التي إما تكون فارغة أو غير مهمة للعثور على عناوين IP المخصصة لسيرفري:


إذا قمت ببساطة بإضافة Format-Table إلى نهاية cmdlet Get-NetIPAddress، تصبح البيانات الناتجة أسهل بكثير على العين، بينما لا تزال تقدم لي المعلومات المهمة التي أبحث عنها، وهي عناوين IP المستخدمة على النظام:


Get-NetIPAddress | Format-Table



قد يكون بعضكم مألوفًا بأمر cmdlet يسمى Select-Object، الذي يمكنه أداء نفس الوظائف مثل Format-Table. بينما يبدو أن Select-Object هو cmdlet الأكثر شهرة، في تجربتي، فهو في الواقع أقل قوة من Format-Table، لذا أقترح عليك قضاء بعض الوقت في اللعب مع الذي ناقشناه هنا.


ال Format-List


بالمثل للطريقة التي يعمل بها Format-Table، يمكنك استخدام Format-List لعرض ناتج الأوامر كقائمة خصائص. دعونا نجربها بسرعة. نحن نعرف بالفعل أن Get-Command يعطينا cmdlets المتاحة داخل PowerShell، وبشكل افتراضي، يعرضها لنا في تنسيق جدول.

إذا أردنا عرض ذلك الناتج في قائمة بدلاً من ذلك، مع تقديم المزيد من المعلومات حول كل cmdlet، يمكننا أن نطلب من Get-Command أن يعرض بياناته في تنسيق قائمة، مع الأمر التالي:


Get-Command | Format-List


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


Get-Command -Name *Restart* | Format-List


التخصيصات المرئية


إذا كنت تشاهد هذا الفصل بالألوان (انت كذلك بالفعل) ، فقد تكون قد لاحظت أنني عمدت إلى تضمين بعض لقطات الشاشة مع نافذة PowerShell زرقاء (لون PowerShell الكلاسيكي)، وبعضها يعمل بخلفية سوداء. لم أقم بتغيير أي شيء داخل PowerShell لتحقيق هذه الاختلافات؛ إنها تُظهر أن PowerShell على إصدارات أنظمة التشغيل المختلفة قد تبدو مختلفة بصريًا عن بعضها البعض. العديد من أنظمة التشغيل السابقة لـ Windows Server والعميل ستُظهر باللون الأزرق افتراضيًا، في حين أن الأحدث تُظهر باللون الأسود. Windows Server 2022 يظهر افتراضيًا بلون أسود.


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


النهاية


نكون هنا انتهينا من الجزء 1 من الفصل 11 تماما من شهادة MCSA المقدمة من Microsoft الأن نغوص في الأعماق


و لا بد وانت تقرا ان تكون مركز جيدا لكل معلومة ومعك ورقة وقلم , لانك بالتاكيد ستحتاجها 


واذا واجهتك اي مشكلة في الفهم او ما شابه , يمكنك على الفور الذهاب الى المجتمع الخاص بنا في Telegram للمناقشة والتواصل معنا من هنا  


او اذا واجهتك مشكلة في الموقع او تريد اجابة سريعة يمكنك الذهاب الى اخر صفحة في الموقع ستجد صفحة اتصل بنا موجودة يمكنك ارسالة لنا مشكلتك , وسيتم الرد عليها بسرعة جدا ان شاء الله 


ويمكنك الأنضمام الى المجتمع Hidden Lock بالكامل مع جميع قنواته للأستفادة في اخر الأخبار في عالم التقنية وايضا الكتب بالمجان والكورسات والمقالات من خلال الرابط التالي لمجموعة القنوات من     هنا 


يمكنك ايضا متابعتنا في منصات X او Twitter سابقا , لمشاهدة الاخبار والمقالات السريعة والمهمة من  

هنا


وفقط كان معكم Sparrow اتمنى ان تدعوا لي وتتذكروني في الخير دوما




Tags

إرسال تعليق

0تعليقات

إرسال تعليق (0)

#buttons=(موافق!) #days=(20)

يستخدم موقعنا ملفات تعريف الارتباط لتحسين تجربتك. تاكد الان
Ok, Go it!