تاريخيًا ، تم تطوير أدوات سطر الأوامر المساعدة على أنظمة Unix بشكل أفضل من تلك الموجودة على Windows ، ولكن مع ظهور حل جديد ، تغير الوضع.
يسمح Windows PowerShell لمسؤولي النظام بأتمتة معظم المهام الروتينية. باستخدامه، يمكنك تغيير الإعدادات، وإيقاف الخدمات وبدء تشغيلها، وكذلك إجراء الصيانة على معظم التطبيقات المثبتة. سيكون من الخطأ اعتبار النافذة الزرقاء بمثابة مترجم أوامر آخر. لا يعكس هذا النهج جوهر الابتكارات التي تقترحها Microsoft. في الواقع، إمكانيات Windows PowerShell أوسع بكثير: في سلسلة قصيرة من المقالات، سنحاول معرفة كيفية اختلاف حل Microsoft عن الأدوات التي نعرفها أكثر.
الميزات الرئيسية
بالطبع، يعد Windows PowerShell في المقام الأول عبارة عن غلاف برمجة نصية، تم إنشاؤه في الأصل على .NET Framework ولاحقًا على .NET Core. على عكس الأصداف التي تقبل البيانات النصية وترجعها، يعمل Windows PowerShell مع فئات .NET التي لها خصائص وأساليب. يتيح لك PowerShell تشغيل الأوامر الشائعة ويمنحك أيضًا إمكانية الوصول إلى كائنات COM وWMI وADSI. ويستخدم مخازن مختلفة، مثل نظام الملفات أو سجل ويندوز، للوصول إلى ما يسمى. مقدمي الخدمات. تجدر الإشارة إلى إمكانية تضمين مكونات PowerShell القابلة للتنفيذ في تطبيقات أخرى لتنفيذ عمليات مختلفة، بما في ذلك. من خلال واجهة رسومية. والعكس صحيح أيضًا: حيث توفر العديد من تطبيقات Windows إمكانية الوصول إلى واجهات الإدارة الخاصة بها من خلال PowerShell.
يسمح لك Windows PowerShell بما يلي:
- تغيير إعدادات نظام التشغيل.
- إدارة الخدمات والعمليات؛
- تكوين أدوار الخادم ومكوناته؛
- تثبيت نظام التشغيل؛
- إدارة البرامج المثبتة من خلال واجهات خاصة؛
- تضمين المكونات القابلة للتنفيذ في برامج الطرف الثالث؛
- إنشاء البرامج النصية لأتمتة المهام الإدارية؛
- العمل مع نظام الملفات وسجل Windows ومخزن الشهادات وما إلى ذلك.
شل وبيئة التطوير
يوجد Windows PowerShell في شكلين: بالإضافة إلى محاكي وحدة التحكم مع غلاف الأوامر، هناك بيئة برمجة نصية متكاملة (ISE). للوصول إلى واجهة سطر الأوامر، ما عليك سوى تحديد الاختصار المناسب من قائمة Windows أو تشغيل powershell.exe من قائمة "تشغيل". ستظهر نافذة زرقاء على الشاشة، تختلف بشكل ملحوظ في القدرات عن cmd.exe القديم. هناك الإكمال التلقائي وميزات أخرى مألوفة لمستخدمي قذائف الأوامر لأنظمة يونكس.
للعمل مع الصدفة، عليك أن تتذكر بعض اختصارات لوحة المفاتيح:
- يقوم السهمان لأعلى ولأسفل بالتمرير خلال السجل لتكرار الأوامر المكتوبة مسبقًا؛
- يقوم السهم الأيمن الموجود في نهاية السطر بإعادة كتابة حرف الأمر السابق بحرف؛
- يقوم Ctrl+Home بحذف النص المكتوب من موضع المؤشر إلى بداية السطر؛
- يقوم Ctrl+End بحذف النص من المؤشر إلى نهاية السطر.
يعرض F7 نافذة تحتوي على أوامر مكتوبة ويسمح لك باختيار أحدها. تعمل وحدة التحكم أيضًا مع تحديد النص باستخدام الماوس، والنسخ واللصق، وتحديد موضع المؤشر، والحذف، ومسافة للخلف - كل ما نحبه.
يعد Windows PowerShell ISE بيئة تطوير كاملة تحتوي على محرر تعليمات برمجية مبوب ومميز ببناء الجملة، ومنشئ أوامر، ومصحح أخطاء مضمن، ومتع البرمجة الأخرى. إذا كتبت واصلة بعد اسم الأمر في محرر بيئة التطوير، فستحصل على جميع الخيارات المتاحة في القائمة المنسدلة مع الإشارة إلى النوع. يمكنك تشغيل PowerShell ISE إما من خلال اختصار من قائمة النظام، أو باستخدام الملف القابل للتنفيذ powershell_ise.exe.
أوامر الأوامر
في Windows PowerShell، ما يسمى. أوامر cmdlets. هذه هي فئات .NET المتخصصة التي توفر مجموعة متنوعة من الوظائف. يتم تسميتها بـ Action-Object (أو Verb-Noun، إذا كنت تفضل ذلك)، ويشبه الرابط المفصول بواصلة المسند والموضوع في جمل اللغة الطبيعية. على سبيل المثال، كلمة Get-Help تعني حرفيًا "Get-Help"، أو في سياق PowerShell: "Show-Help". في الواقع، هذا مماثل للأمر man في أنظمة Unix، ويجب طلب الأدلة في PowerShell بهذه الطريقة، وليس عن طريق استدعاء أوامر cmdlets باستخدام مفتاح --help أو /?. لا تنسَ وثائق PowerShell عبر الإنترنت: مايكروسوفت لديها مفصلة تماما.
بالإضافة إلى Get، تستخدم أوامر cmdlets أيضًا أفعالًا أخرى للإشارة إلى الإجراءات (وليس الأفعال فقط، بالمعنى الدقيق للكلمة). وفي القائمة أدناه نعطي بعض الأمثلة:
Add
- يضيف؛
Clear
- واضح؛
Enable
- شغله؛
Disable
- اطفيء؛
New
- يخلق؛
Remove
- يمسح؛
Set
- بسأل؛
Start
- يجري؛
Stop
- قف؛
Export
- يصدّر؛
Import
- يستورد.
هناك أوامر cmdlets خاصة بالنظام والمستخدم والاختيارية: نتيجة للتنفيذ، تقوم جميعها بإرجاع كائن أو مجموعة من الكائنات. فهي ليست حساسة لحالة الأحرف، أي. من وجهة نظر مترجم الأوامر، لا يوجد فرق بين الحصول على المساعدة والحصول على المساعدة. يتم استخدام الحرف ';' للفصل، ولكن من الضروري وضعه فقط في حالة تنفيذ عدة أوامر cmdlets على نفس السطر.
يتم تجميع أوامر Windows PowerShell cmdlets في وحدات نمطية (NetTCPIP، وHyper-V، وما إلى ذلك)، ويوجد أمر Get-Command cmdlet للبحث حسب الكائن والإجراء. يمكنك عرض المساعدة لها مثل هذا:
Get-Help Get-Command
افتراضيًا، يعرض الأمر تعليمات مختصرة، ولكن يتم تمرير المعلمات (الوسائط) إلى أوامر cmdlets حسب الحاجة. بمساعدتهم، يمكنك، على سبيل المثال، الحصول على مساعدة تفصيلية (المعلمة -Detailed) أو كاملة (المعلمة -Full)، بالإضافة إلى عرض الأمثلة (المعلمة -أمثلة):
Get-Help Get-Command -Examples
يتم تحديث التعليمات في Windows PowerShell بواسطة Update-Help cmdlet. إذا تبين أن سطر الأوامر طويل جدًا، فيمكن نقل وسيطات cmdlet إلى السطر التالي عن طريق كتابة حرف الخدمة ''' والضغط على Enter - لن ينجح مجرد الانتهاء من كتابة الأمر في سطر واحد والاستمرار في سطر آخر.
فيما يلي بعض الأمثلة على أوامر cmdlets الشائعة:
Get-Process
- إظهار العمليات الجارية في النظام؛
Get-Service
— عرض الخدمات وحالتها.
Get-Content
- عرض محتويات الملف.
بالنسبة لأوامر cmdlets والأدوات المساعدة الخارجية المستخدمة بشكل متكرر، يحتوي Windows PowerShell على مرادفات قصيرة - أسماء مستعارة (من الاسم المستعار الإنجليزي). على سبيل المثال، dir هو اسم مستعار لـ Get-ChildItem. تتضمن قائمة المرادفات أيضًا نظائرها من أوامر أنظمة Unix (ls، ps، وما إلى ذلك)، ويتم استدعاء Get-Help cmdlet بواسطة أمر help. يمكن الاطلاع على قائمة كاملة من المرادفات باستخدام أمر Get-Alias cmdlet:
البرامج النصية والوظائف والوحدات النمطية ولغة PowerShell
يتم تخزين البرامج النصية لـ Windows PowerShell كملفات نصية عادية ذات ملحق .ps1. لا يمكنك تشغيلها بالنقر المزدوج: تحتاج إلى النقر بزر الماوس الأيمن لاستدعاء قائمة السياق وتحديد العنصر "Run in PowerShell". من وحدة التحكم، سيتعين عليك إما تحديد المسار الكامل للبرنامج النصي، أو الانتقال إلى الدليل المناسب وكتابة اسم الملف. تشغيل البرامج النصية مقيد أيضًا بسياسة النظام، وللتحقق من الإعدادات الحالية، يمكنك استخدام Get-ExecutionPolicy cmdlet، والذي سيرجع إحدى القيم التالية:
Restricted
— تم تعطيل تشغيل البرامج النصية (افتراضيًا)؛
AllSigned
- يُسمح فقط بتشغيل البرامج النصية الموقعة من قبل مطور موثوق به؛
RemoteSigned
- مسموح بتشغيل البرامج النصية الموقعة والخاصة؛
Unrestricted
- يسمح بتشغيل أي البرامج النصية.
المسؤول لديه خياران. الأكثر أمانا ينطوي على توقيع البرامج النصية، ولكن هذا سحر خطير للغاية - سنتعامل معه في المقالات التالية. الآن دعونا نسلك الطريق الأقل مقاومة ونغير السياسة:
Set-ExecutionPolicy RemoteSigned
سيلزم تشغيل PowerShell كمسؤول للقيام بذلك، على الرغم من أنه يمكنك تغيير السياسة للمستخدم الحالي باستخدام إعداد خاص.
تتم كتابة البرامج النصية بلغة برمجة موجهة للكائنات، ويتم تسمية أوامرها وفقًا لنفس مبدأ أوامر cmdlets التي تمت مناقشتها مسبقًا: "كائن الإجراء" ("الفعل-الاسم"). والغرض الرئيسي منها هو أتمتة المهام الإدارية، ولكنها لغة مفسرة كاملة تحتوي على جميع البنيات الضرورية: القفز الشرطي، والحلقات، والمتغيرات، والمصفوفات، والكائنات، ومعالجة الأخطاء، وما إلى ذلك. أي محرر نصوص مناسب لكتابة البرامج النصية، ولكنه أكثر ملاءمة لتشغيل Windows PowerShell ISE.
يمكنك تمرير المعلمات إلى البرنامج النصي، وجعلها مطلوبة، وتعيين القيم الافتراضية. بالإضافة إلى ذلك، يسمح لك Windows PowerShell بإنشاء واستدعاء الوظائف بنفس طريقة أوامر cmdlets، وذلك باستخدام إنشاء الوظيفة والأقواس المتعرجة. يسمى البرنامج النصي ذو الوظائف بوحدة نمطية وله ملحق .psm1. يجب تخزين الوحدات في الدلائل المحددة في متغيرات بيئة PowerShell. يمكنك مشاهدتها باستخدام الأمر التالي:
Get-ChildItem Env:PSModulePath | Format-Table -AutoSize
الناقلون
في المثال الأخير، استخدمنا بنية مألوفة لمستخدمي Unix Shell. في Windows PowerShell، يسمح لك الشريط العمودي أيضًا بتمرير إخراج أمر واحد إلى إدخال أمر آخر، ولكن هناك اختلافًا كبيرًا في تنفيذ المسار: لم نعد نتحدث عن مجموعة من الأحرف أو نوع ما من الأحرف نص. تقوم أوامر cmdlets المضمنة أو الوظائف المحددة من قبل المستخدم بإرجاع كائنات أو صفائف من الكائنات، ويمكنها أيضًا استقبالها كمدخلات. مثل Bourne Shell والعديد من الإصدارات اللاحقة له، يعمل PowerShell على تسهيل المهام المعقدة من خلال المسار.
أبسط مثال على خط الأنابيب يبدو كما يلي:
Get-Service | Sort-Object -property Status
أولاً، يتم تنفيذ أمر Get-Service cmdlet، ثم يتم تمرير كافة الخدمات التي يتلقاها إلى أمر Sort-Object cmdlet لفرزها حسب خاصية الحالة. تعتمد الوسيطة التي تم تمرير نتيجة القسم السابق من المسار إليها على نوعها - عادةً ما تكون InputObject. ستتم مناقشة هذه المشكلة بمزيد من التفصيل في مقالة مخصصة للغة برمجة PowerShell.
إذا كنت ترغب في ذلك، يمكنك متابعة السلسلة وتمرير نتيجة عملية فرز الكائنات إلى أمر cmdlet آخر (سيتم تنفيذها من اليسار إلى اليمين). بالمناسبة، يتمتع مستخدمو Windows أيضًا بإمكانية الوصول إلى إنشاء ترقيم الصفحات المألوف لدى جميع Unixoids:
Get-Service | Sort-Object -property Status | more
تشغيل المهام في الخلفية
في كثير من الأحيان، من الضروري تشغيل أمر معين في الخلفية، حتى لا تنتظر نتيجة تنفيذه في جلسة الصدفة. يحتوي Windows PowerShell على العديد من أوامر cmdlets لهذه الحالة:
Start-Job
- إطلاق مهمة الخلفية؛
Stop-Job
- إيقاف مهمة الخلفية؛
Get-Job
— عرض قائمة المهام الخلفية.
Receive-Job
- عرض نتيجة تنفيذ المهمة في الخلفية؛
Remove-Job
- حذف مهمة في الخلفية؛
Wait-Job
- نقل مهمة الخلفية مرة أخرى إلى وحدة التحكم.
لبدء مهمة في الخلفية، نستخدم الأمر Start-Job cmdlet ونحدد أمرًا أو مجموعة من الأوامر بين قوسين متعرجين:
Start-Job {Get-Service}
يمكن معالجة مهام الخلفية في Windows PowerShell من خلال معرفة أسمائها. لنتعرف أولاً على كيفية عرضها:
Get-Job
والآن لنعرض نتيجة الوظيفة Job1:
Receive-Job Job1 | more
كل شيء بسيط جدًا.
تنفيذ الأوامر عن بعد
يسمح لك Windows PowerShell بتنفيذ الأوامر والبرامج النصية ليس فقط على الكمبيوتر المحلي، ولكن أيضًا على كمبيوتر بعيد، وحتى على مجموعة كاملة من الأجهزة. هناك عدة طرق للقيام بذلك:
- تحتوي العديد من أوامر cmdlets على معلمة
-ComputerName
ولكن بهذه الطريقة لن يكون من الممكن، على سبيل المثال، إنشاء ناقل؛ - cmdlet
Enter-PSSession
يسمح لك بإنشاء جلسة تفاعلية على جهاز بعيد؛ - باستخدام الأمر cmdlet
Invoke-Command
يمكنك تشغيل الأوامر أو البرامج النصية على واحد أو أكثر من أجهزة الكمبيوتر البعيدة.
إصدارات بوويرشيل
لقد تغير PowerShell كثيرًا منذ إصداره الأول في عام 2006. الأداة متاحة للعديد من الأنظمة التي تعمل على منصات الأجهزة المختلفة (x86، x86-64، Itanium، ARM): Windows XP، Windows Server 2003، Windows Vista، Windows Server 2008/2008 R2، Windows 7، Windows 8، Windows 8.1، Windows RT وWindows RT 8.1 وWindows Server 2012/2012 R2 وWindows 10 وWindows Server 2016 وGNU/Linux وOS X. تم إصدار الإصدار الأخير 6.2 في 10 يناير 2018. من المرجح أن تعمل البرامج النصية المكتوبة للإصدارات السابقة في الإصدارات الأحدث، ولكن يمكن أن يكون النقل الخلفي مشكلة لأن PowerShell قدم عددًا كبيرًا من أوامر cmdlets الجديدة على مدار سنوات التطوير. يمكنك معرفة إصدار غلاف الأوامر المثبت على الكمبيوتر باستخدام خاصية PSVersion للمتغير المدمج $PSVersionTable:
$PSVersionTable.PSVersion
يمكنك أيضًا استخدام الأمر cmdlet:
Get-Variable -Name PSVersionTable –ValueOnly
ويتم نفس الشيء مع أمر Get-Host cmdlet. في الواقع هناك العديد من الخيارات، ولكن لاستخدامها عليك أن تتعلم لغة البرمجة PowerShell، وهو ما سنفعله في
نتائج
تمكنت Microsoft من إنشاء غلاف قوي حقًا مع بيئة متكاملة ملائمة لتطوير البرامج النصية. وهو يختلف عن الأدوات المألوفة لدينا في عالم Unix من خلال التكامل العميق مع أنظمة التشغيل التابعة لعائلة Windows، وكذلك مع البرامج الخاصة بها ومنصة .NET Core. يمكن أن يُطلق على PowerShell اسم الصدفة الموجهة للكائنات لأن أوامر cmdlets والوظائف المعرفة من قبل المستخدم تُرجع كائنات أو صفائف من الكائنات ويمكن أن تأخذها كمدخلات. نعتقد أن جميع مسؤولي الخادم على نظام التشغيل Windows يجب أن يمتلكوا هذه الأداة: لقد مر الوقت الذي كان بإمكانهم الاستغناء فيه عن سطر الأوامر. هناك حاجة بشكل خاص إلى غلاف وحدة تحكم متقدم
يمكن للمستخدمين المسجلين فقط المشاركة في الاستطلاع.
ما هي المواضيع التي يجب تناولها أولاً في المقالات التالية في السلسلة؟
-
53,2%البرمجة في PowerShell123
-
42,4%وظائف ووحدات PowerShell98
-
22,1%كيفية التوقيع على البرامج النصية الخاصة بك؟51
-
12,1%العمل مع المخازن من خلال مقدمي الخدمات28
-
57,6%أتمتة إدارة الكمبيوتر باستخدام PowerShell133
-
30,7%إدارة البرامج وتضمين ملفات PowerShell التنفيذية في منتجات الجهات الخارجية71
صوّت 231 مستخدمًا. امتنع 37 مستخدما عن التصويت.
المصدر: www.habr.com