PowerShell Write-Output: رفيق إخراجك الودود

قل وداعًا لإخراج السيناريو الممل والمتوقع! باستخدام أمر PowerShell Write-Output، يمكنك إضفاء الإبداع والشخصية على سيناريوهات PowerShell الخاصة بك.

أمر Write-Output هو أداة قوية وشريك مثالي لجميع احتياجات الأتمتة وإدارة النظام الخاصة بك. وفي هذا البرنامج التعليمي، ستتعلم كيفية استغلال إمكانات أمر Write-Output إلى أقصى حده.

هل أنت مستعد؟ استمر في القراءة واكتشف سحر أمر Write-Output!

المتطلبات المسبقة

سيكون هذا البرنامج التعليمي عبارة عن عرض عملي. لكي تتمكن من متابعته، تأكد من وجود كمبيوتر يحتوي على PowerShell مثبتًا (مفضلًا الإصدار الأحدث). يستخدم هذا البرنامج التعليمي نظام التشغيل Windows 10 مع PowerShell 7 مثبتًا.

إخراج الكائنات إلى وحدة التحكم

يقوم أمر PowerShell Write-Output بكتابة الكائنات إلى تيار الإخراج وعرض نتائج الأوامر أو الرسائل في وحدة التحكم. ولكن ستفاجأ من كيفية جعل هذه الأداة للإخراج أكثر معنى وقيمة.

بدلاً من عرض النتيجة في وحدة التحكم، استخدم cmdlet Write-Output لتخصيص الناتج. يمكن لـ cmdlet Write-Output إخراج أي كائن أو نوع بيانات، مثل سلاسل النصوص، الأعداد الصحيحة، المصفوفات، وحتى الكائنات المعقدة.

قم بتشغيل الأمر التالي لإخراج رسالة Hello, World! إلى وحدة التحكم.

Write-Output "Hello, World!”

فيما يلي يمكنك رؤية الوظيفة الأساسية لـ cmdlet Write-Output. ولكن تابع القراءة لمعرفة المزيد عن استخدام هذا الأمر بشكل متوسط ومتقدم.<>

Outputting objects to the console

إرسال الكائنات إلى أمر آخر

بالإضافة إلى عرض النتيجة في وحدة التحكم، يمكنك استخدام أمر Write-Output لإرسال الكائن إلى أمر آخر للمعالجة الإضافية. كيف؟ باستخدام عامل الأنابيب (|). يجعل الأنابيب Pipelining الأمر Write-Output أداة مفيدة ومتعددة الاستخدامات للمهام التلقائية وإدارة النظام.

لنفترض أنك ترغب في معرفة العملية التي تستهلك معظم الموارد الخاصة بك، مثل وحدة المعالجة المركزية (CPU).

قم بتشغيل الأوامر أدناه لتنفيذ ما يلي:

  • استرداد قائمة بجميع العمليات (Get-Process) التي تعمل على النظام الخاص بك.
  • أخرج القائمة إلى الأنبوبة، التي يتم تمريرها إلى أمر Sort-Object. يسمح لك مشغل الأنبوبة بربط عدة أوامر معًا ومعالجة إخراج أمر واحد كإدخال لآخر.
  • قم بترتيب قائمة العمليات (Sort-Object) حسب استخدام وحدة المعالجة المركزية (CPU) بترتيب -Descending.
$processes = Get-Process
Write-Output $processes | Sort-Object CPU -Descending

يرجى ملاحظة أنه يمكنك وضع أي من الأوامر في هذا البرنامج التعليمي في نص برمجة PowerShell وتشغيله.

يتم عرض القائمة المرتبة في وحدة التحكم، كما هو موضح أدناه.

Passing objects to another command

إخراج الكائنات بتنسيق مخصص

لقد رأيت تنسيق الإخراج الأساسي لأمر Write-Output والذي يعمل بشكل جيد. ولكن إذا كنت تود ذلك، يمكنك أيضًا إخراج الكائنات بتنسيق مخصص لإضافة لمسة شخصية. يمكن أن يكون التنسيق المخصص مفيدًا عندما ترغب في عرض خصائص محددة للكائن أو تخصيص مظهر الإخراج.

لإخراج كائن بتنسيق مخصص، ستؤدي الأمر Format-Custom مع أمر Write-Output إلى الغرض، على النحو التالي:

لإنشاء تنسيق الإخراج المخصص، ثم قم بتوجيه إخراج أمر Format-Custom إلى Write-Output.<>

قم بتشغيل الأمر أدناه، الذي لا ينتج إخراجًا، ولكنه ينشئ كائنًا (جدول مفاتيح) يحتوي على ثلاث خصائص مع القيم المقابلة لها للإخراج.

$object = [pscustomobject]@{
Property1 = "Value1"
Property2 = "Value2"
Property3 = "Value3"
}

الآن، قم بتشغيل الأمر أدناه لأداء ما يلي:

  • إنشاء تنسيق مخصص (Format-Table) لإخراج (Write-Output) الجدول الخاص بك ($object). يتم تعيين الخصائص Property1، Property2، و Property3 كأعمدة.
  • ضبط عرض الأعمدة (-AutoSize) ليتناسب مع المحتوى.
$object | Format-Table -Property Property1, Property2, Property3 -AutoSize | Write-Output
Creating a custom format for an object output

بديلًا، يمكنك استخدام أمر Format-List مع Write-Output لإخراج الكائن كقائمة من أزواج الخاصية-القيمة.

$object | Format-List -Property Property1, Property2, Property3 | Write-Output
Outputting the object as a list of property-value pairs

تمرير كائن المجموعة ككيان واحد

بشكل افتراضي، يقوم Write-Output بإرسال كل عنصر من مجموعة البيانات عبر الأنابيب بشكل منفصل، وهذه العملية تسمى التعداد. ولكن يمكنك منع هذا السلوك عن طريق إضافة المعلمة -NoEnumerate، وتمرير كائن مجموعة ككيان واحد.

لرؤية كيفية عمل المعلمة -NoEnumerate، اتبع الخطوات التالية:

قم بتشغيل الأوامر أدناه لأداء ما يلي:

  • تعريف مصفوفة $numbers من واحد إلى ثلاثة (1,2,3).
  • عدد الكائنات الممررة عبر الأنابيب (Measure-Object).
  • اطبع قياس الكائن (Write-Output $numbers).

بدون معامل NoEnumerate ، يُرجع Measure-Object عددًا يبلغ ثلاثة (3) ، حيث تم تعداد كل عنصر من مصفوفة $numbers وتم تمريره عبر خط الأنابيب بشكل فردي.

# يعلن عن مصفوفة
$numbers = 1,2,3
# يُخرج عدد الكائنات التي تم تمريرها عبر خط الأنابيب
Write-Output $numbers | Measure-Object
Outputting an array object measurement

الآن ، قم بتشغيل الأوامر التالية لإخراج عدد الكائنات التي تم تمريرها عبر خط الأنابيب.

ولكن نظرًا لأنك أضفت معامل -NoEnumerate ، يعامل أمر Measure-Object الكائن ككيان واحد ، مما يعيد عددًا واحدًا (1).

# يعلن عن مصفوفة
$numbers = 1,2,3
# يُخرج عدد الكائن ككيان واحد تم تمريره عبر خط الأنابيب
Write-Output -NoEnumerate $numbers | Measure-Object
Outputting object count as a single entity

إحاطة أمر Write-Output بعلامات القوس المستديرة (أي (Write-Output 1,2,3)) سوف يجبر على التعداد يحدث بغض النظر عن معامل -NoEnumerate.

إنشاء نظام قائمة والتعليمات البرمجية للإدخال

استخدام آخر رائع لأمر Write-Output هو إنشاء نظام قائمة باستخدام نص برمجة PowerShell يطلب من المستخدم إدخال.

قم بإنشاء ملف .ps1 باستخدام محرر النصوص / الشفرة الخاص بك ، واملأ الشفرة أدناه ، واحفظ الملف. يمكنك تسمية الملف كما تريد ، ولكن اختيار هذا البرنامج التعليمي هو myoutput.ps1.

يستخدم الكود أدناه حلقة تكرارية لدعوة المستخدم باستمرار لتحديد خيار من قائمة الخيارات حتى يحدد المستخدم خيار “خروج”.

# قم بتهيئة المتغير $exit لقيمة $false
$exit = $false

# قم ببدء حلقة تكرارية ستستمر حتى يختار المستخدم الخيار "خروج"
while (!$exit) {

  # عرض قائمة الخيارات للمستخدم
  Write-Output "Please select from the following options:"
  Write-Output "1. Option 1"
  Write-Output "2. Option 2"
  Write-Output "3. Option 3"
  Write-Output "4. Exit"

  # اطلب من المستخدم اختيار خيار
  $selection = Read-Host

  # استخدم تعليمة الانتقال الشرطي لتنفيذ أكواد مختلفة بناءً على اختيار المستخدم
  switch ($selection) {
    1 {
      # إذا اختار المستخدم الخيار 1، عرض رسالة وقم بعمل شيء ما للخيار 1
      Write-Output "You selected Option 1."
      # قم بعمل شيء ما للخيار 1
    }
    2 {
      # إذا اختار المستخدم الخيار 2، عرض رسالة وقم بعمل شيء ما للخيار 2
      Write-Output "You selected Option 2."
      # قم بعمل شيء ما للخيار 2
    }
    3 {
      # إذا اختار المستخدم الخيار 3، عرض رسالة وقم بعمل شيء ما للخيار 3
      Write-Output "You selected Option 3."
      # قم بعمل شيء ما للخيار 3
    }
    4 {
      # إذا اختار المستخدم الخيار 4، اجعل $exit يساوي $true للخروج من الحلقة
      $exit = $true
    }
  }
}

الآن، قم بتشغيل النص البرمجي (myoutput.ps1) من المجلد العامل.

./myoutput.ps1

كما هو موضح أدناه، يتم عرض الرسالة المرتبطة بالاختيار الذي قمت به عند اختيار الخيارات 1، 2، أو 3. ولكن عند اختيار الخيار 4، يتم إيقاف تشغيل النص البرمجي.

Creating a menu system and input prompts

عرض شاشة ترحيبية أو رسالة ترحيبية

بالإضافة إلى عرض الخيارات التي يمكن للمستخدمين اختيارها، يمكنك أيضًا عرض شاشة ترحيب أو رسالة ترحيب باستخدام Write-Output. تعتبر شاشات الترحيب المزخرفة فكرة جيدة (مهنية ومصقولة) لنص سيناريو البرنامج النصي الخاص بك.

قم بإستبدال الكود في ملف myoutput.ps1 بالكود أدناه، الذي يقوم بإخراج شاشة ترحيب (لافتة ترحيبية) عند تشغيل البرنامج النصي.

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

# مسح الشاشة
Clear-Host

# عرض شاشة الترحيب باستخدام Write-Output
Write-Output "##############################################"
Write-Output "#                                            #"
Write-Output "#   Welcome to the SuperScript 3000!         #"
Write-Output "#                                            #"
Write-Output "##############################################"

الآن، قم بتشغيل البرنامج النصي وشاهد كيف يبدو شاشة الترحيب الخاصة بك.

./myoutput.ps1
Displaying a splash screen or welcome message

عرض شريط تقدم

عند تشغيل البرامج النصية، يساعد مؤشر التقدم في التخلص من قلق المستخدم حول ما إذا كان البرنامج النصي يعمل أم لا. يمكن أن تكون أشرطة التقدم مفيدة للإشارة إلى تقدم البرنامج النصي أو العملية الطويلة. لحسن الحظ، يمكنك باستخدام أداة Write-Output إنشاء شريط تقدم حسب رغبتك.

افتح ملف myoutput.ps1 الخاص بك وأضف الكود أدناه إلى نهاية الكود الحالي في الملف النصي.

يستخدم الكود أدناه حلقة while للتكرار عبر عدة خطوات. في هذا المثال، 100 خطوة. يقوم كل دورة في الحلقة بحساب النسبة المئوية للخطوات التي تم إكمالها وعرض شريط التقدم باستخدام Write-Output.

تم إنشاء شريط التقدم باستخدام مجموعة من العمليات التالية:

  • * – يكرر سلسلة محددة عددًا محددًا من المرات
  • $() – يسمح بتضمين إخراج تعبير في سلسلة.

ثم يتوقف البرنامج النصي (Start-Sleep) لمدة 1 ثانية لمحاكاة التقدم قبل المضي قدمًا إلى الخطوة التالية.


# قم بتعيين إجمالي عدد الخطوات لشريط التقدم

$steps = 100


# قم بتهيئة العداد للخطوة الحالية

$currentStep = 0


# ابدأ حلقة ستتكرر لعدد الخطوات

while ($currentStep -lt $steps) {
  
# زيادة عداد الخطوة الحالية

  $currentStep++

  
# احسب النسبة المئوية للخطوات المكتملة

  $percentComplete = [int] ($currentStep / $steps * 100)

  
# عرض شريط تقدم باستخدام Write-Output

  Write-Output "Progress: [$("=" * $percentComplete)$(" " * ($steps-$percentComplete))] $percentComplete% complete"

  
# الاستراحة لمدة 1 ثانية لمحاكاة التقدم

  Start-Sleep -Seconds 1
}

الآن، قم بتشغيل البرنامج النصي وشاهد كيف يعمل شريط التقدم.

./myoutput.ps1

أدناه، يمكنك رؤية شاشة البدء مع شريط التقدم.

Displaying a progress bar

استنتاج

في هذا البرنامج التعليمي، رأيت كيف يمكن لـ Write-Output بسهولة إخراج الكائنات وأنواع البيانات والتنسيقات المخصصة. علاوة على ذلك، تطرقت إلى استخدام مشغل الأنابيب لإرسال الإخراج إلى أوامر أخرى للمعالجة اللاحقة.

سواء كنت تكتب رسالة بسيطة أو مهام أتمتة معقدة ، فإن Write-Output هو أداة لا غنى عنها لإنشاء نصوص برمجة قوية ومهنية في PowerShell.

بفضل هذا المعرفة الجديدة ، لماذا لا تكتب النصوص الناتجة إلى أنواع ملفات مختلفة مثل ملفات .txt و .xml؟ بغض النظر عن الهدف ، فإن توجيهات النصوص تكون مفيدة في حل مشاكل النظام أو التطبيقات. يمنحك Write-Output وأمر Out-File القوة التي لم تكن تعلم أنك بحاجة إليها.

Source:
https://adamtheautomator.com/powershell-write-output/