ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

تاريخيًا ، تم تطوير أدوات سطر الأوامر المساعدة على أنظمة Unix بشكل أفضل من تلك الموجودة على Windows ، ولكن مع ظهور حل جديد ، تغير الوضع.

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

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

главление:

تعليقات
المتغيرات وأنواعها
متغيرات النظام
النطاقات
متغيرات البيئة (البيئة)
عوامل الحساب والمقارنة
عوامل التعيين
العوامل المنطقية
القفز الشرطي
دورات
المصفوفات
جداول تجزئة
وظائف
معالجة الخطأ

يمكنك كتابة التعليمات البرمجية في أي محرر نصوص أو استخدام بيئة تطوير متكاملة - أسهل طريقة هي استخدام Windows PowerShell ISE الذي يأتي مع أنظمة تشغيل خادم Microsoft. هذا ضروري فقط للنصوص المعقدة إلى حد ما: مجموعات الأوامر القصيرة أسهل في التنفيذ بشكل تفاعلي.

تعليقات

يعتبر استخدام التعليقات جزءًا من أسلوب البرمجة الجيد جنبًا إلى جنب مع المسافة البادئة الصحيحة والمسافات البيضاء:

# Для строчных комментариев используется символ решетки — содержимое строки интерпретатор не обрабатывает.

<# 

       Так обозначаются начало и конец блочного комментария. 
       Заключенный между ними текст интерпретатор игнорирует.

#>

المتغيرات وأنواعها

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

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

لتهيئة متغير (إسناد قيمة إليه) ، يتم استخدام عامل التعيين (الرمز =):

$test = 100

يمكنك التصريح عن متغير عن طريق تحديد نوعه بين أقواس مربعة (عامل صب النوع) قبل الاسم أو القيمة:

[int]$test = 100

$test = [int]100

من المهم أن نفهم أن المتغيرات في PowerShell هي كائنات كاملة (فئات) لها خصائص وطرق تعتمد أنواعها على تلك الموجودة في .NET Core. نسرد أهمها:

النوع (فئة .NET)

وصف

مثال رمز

[سلسلة] System.String

سلسلة Unicode 

اختبار $ = "test"
اختبار $ = 'test'

[شار] System.Char

حرف Unicode (16 بت)

[char] $ test = 'c'

[منطقي] System.Boolean

النوع المنطقي (صحيح أو خطأ منطقي)

[منطقي] $ test = $ true

[كثافة العمليات] System.Int32

عدد صحيح 32 بت (XNUMX بت)

[int] $ test = 123456789

[طويل] System.Int64

عدد صحيح 64 بت (XNUMX بت)

[طويل] اختبار $ = 12345678910

[مفرد] System.Single

رقم النقطة العائمة 32 بت

[واحد] $ test = 12345.6789

[مزدوج] System.Double

عدد النقطة العائمة بطول 64 بت (8 بايت)

[ضعف] $ test = 123456789.101112

[عشري] System.Decimal

رقم الفاصلة العائمة 128 بت (مطلوب حتى ينتهي بـ d)

[عشري] $ test = 12345.6789d

[التاريخ والوقت] System.DateTime

التاريخ والوقت 

اختبار $ = GetDate

[مجموعة] System.Object []

صفيف يبدأ فهرس عناصره عند 0

$ test_array = 1، 2، "test"، 3، 4

[hashtable] System.Collections.Hashtable

جداول التجزئة عبارة عن مصفوفات ارتباطية بمفاتيح مسماة ، تم إنشاؤها وفقًا للمبدأ: @ {key = "value"}

$ test_hashtable = @ {one = "one"؛ اثنان = "اثنان" ؛ ثلاثة = "ثلاثة"}

يدعم PowerShell تحويل النوع الضمني ، بالإضافة إلى ذلك ، يمكن تغيير نوع المتغير بسرعة (على سبيل المثال ، باستخدام عامل تعيين) ، إذا لم يتم تحديده بالقوة - في هذه الحالة ، سيعطي المترجم خطأ. يمكنك تحديد نوع المتغير من المثال السابق باستدعاء طريقة GetType ():

$test.GetType().FullName

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

يوجد عدد من أوامر cmdlets لمعالجة المتغيرات. يتم عرض قائمتهم في شكل مناسب باستخدام الأمر:

Get-Command -Noun Variable | ft -Property Name, Definition -AutoSize -Wrap

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

لعرض المتغيرات المعلنة وقيمها ، يمكنك استخدام أمر cmdlet خاص:

Get-Variable | more

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

متغيرات النظام

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

$PWD.Path

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

هناك حاجة إلى متغيرات التفضيل لتخزين تفضيلات المستخدم ، والتي يمكن تغيير قيمها. على سبيل المثال ، باستخدام $ ErrorActionPreference ، يتم تعيين رد فعل مترجم الأوامر على حدوث أخطاء غير فادحة.

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

Get-ChildItem Variable: | more

أو

ls Variable: | more

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

النطاقات

بالنسبة للمتغيرات في PowerShell ، يوجد مفهوم النطاق (النطاق). ينطبق إجراء النطاق العالمي (العالمي) على الجلسة الحالية بأكملها - ويشمل ، على سبيل المثال ، متغيرات النظام. المتغيرات المحلية (المحلية) متاحة فقط في النطاق الذي تم تعريفها فيه: قل داخل دالة. هناك أيضًا مفهوم نطاق البرنامج النصي (Script) ، ولكن بالنسبة لأوامر البرنامج النصي ، فهو محلي بشكل أساسي. افتراضيًا ، عند التصريح عن المتغيرات ، يتم إعطاؤها نطاقًا محليًا ، ولتغيير ذلك ، تحتاج إلى بنية خاصة مثل: $ Global: variable = value.

على سبيل المثال ، مثل هذا:

$Global:test = 100

متغيرات البيئة (البيئة)

محرك زائف آخر ، Env: ، متاح من PowerShell ويمكن استخدامه للوصول إلى متغيرات البيئة. عندما يبدأ الغلاف ، يتم نسخها من العملية الأصلية (أي من البرنامج الذي بدأ الجلسة الحالية) وعادة ما تكون قيمها الأولية هي نفس القيم الموجودة في لوحة التحكم. لعرض متغيرات البيئة ، استخدم Get-ChildItem cmdlet أو الأسماء المستعارة (الأسماء المستعارة): ls و dir.

dir Env:

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

هذه المتغيرات عبارة عن متواليات من البايتات (أو أحرف ، إذا أردت) ، ويعتمد تفسيرها فقط على البرنامج الذي يستخدمها. لا تعمل أوامر cmdlets المتغيرة * مع متغيرات البيئة. للوصول إليها ، عليك استخدام بادئة محرك الأقراص:

$env:TEST = "Hello, World!"

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

عوامل الحساب والمقارنة

يوفر PowerShell عوامل التشغيل الحسابية التالية: + (إضافة) ، - (طرح) ، * (مضاعفة) ، / (قسمة) ، و٪ (نمطية أو نمطية). يتم تقييم نتيجة التعبير الحسابي من اليسار إلى اليمين وفقًا لترتيب العمليات المقبول عمومًا ، ويتم استخدام الأقواس لتجميع أجزاء من التعبير. يتم تجاهل المسافات بين عوامل التشغيل ، ويتم استخدامها فقط لتسهيل القراءة. يتسلسل العامل + أيضًا ، ويكرر العامل * السلاسل. إذا حاولت إضافة رقم إلى سلسلة ، فسيتم تحويله إلى سلسلة. بالإضافة إلى ذلك ، تحتوي لغة PowerShell على العديد من عوامل المقارنة التي تتحقق من وجود تطابق بين قيمتين وتعيد القيمة المنطقية True أو False:

عامل

وصف

مثال رمز

-مكافئ

يساوي / يساوي (على غرار = أو == في اللغات الأخرى)

اختبار الدولار = 100
123 دولار اختبار - مكافئ 

-نعم

لا يساوي / لا يساوي (على غرار <> أو! =)

اختبار الدولار = 100
123 دولار   

-Gt

أكبر من / أكثر (تناظري>)

اختبار الدولار = 100
123 دولار

- جي

أكبر من أو يساوي / أكبر من أو يساوي (على غرار> =)

اختبار الدولار = 100
123

-لتر

أقل من / أقل (على غرار <)

اختبار الدولار = 100
123  

-The

أقل من أو يساوي / أقل من أو يساوي (على غرار <=)

اختبار الدولار = 100
123 دولار

هناك عوامل تشغيل أخرى مماثلة تسمح لك ، على سبيل المثال ، بمقارنة السلاسل بناءً على حرف بدل أو استخدام التعبيرات العادية لمطابقة النمط. سنقوم بتغطيتها بالتفصيل في المقالات المستقبلية. لا تُستخدم الرموز <و> و = للمقارنة لأنها تستخدم لأغراض أخرى.

عوامل التعيين

بالإضافة إلى عامل التشغيل = الأكثر شيوعًا ، هناك عوامل تعيين أخرى: + = ، - = ، * = ، / = و٪ =. يغيرون القيمة قبل التعيين. يتصرف العاملان الأحاديان ++ و - ، اللذان يزيدان قيمة المتغير أو ينقصانهما ، بالمثل - كما أنهما ينطبقان على عوامل التعيين.

العوامل المنطقية

المقارنة وحدها لا تكفي لوصف الظروف المعقدة. يمكنك كتابة أي تعبيرات منطقية باستخدام عوامل التشغيل: -and ، -or ، -xor ، -not و! .. تعمل مثل هذه التعبيرات في لغات البرمجة الأخرى ، بينما يمكنك استخدام الأقواس لتحديد ترتيب التقييم:

("Тест" -eq "Тест") -and (100 -eq 100)

-not (123 -gt 321) 

!(123 -gt 321)

القفز الشرطي

مشغلو الفروع في PowerShell معياريون: IF (إذا ... ELSE ، IF ... ELSEIF ... ELSE) و SWITCH. دعونا نلقي نظرة على استخدامها مع الأمثلة:

[int]$test = 100
if ($test -eq 100) {
      Write-Host "test = 100"
}



[int]$test = 50
if ($test -eq 100) {
       Write-Host "test = 100"
}
else {
      Write-Host "test <> 100"
}



[int]$test = 10
if ($test -eq 100) {
      Write-Host "test = 100"
}
elseif ($test -gt 100) {
      Write-Host "test > 100"
}
else {
       Write-Host "test < 100"
}



[int]$test = 5
switch ($test) {
     0 {Write-Host "test = 0"}
     1 {Write-Host "test = 1"}
     2 {Write-Host "test = 2"}
     3 {Write-Host "test = 3"}
     4 {Write-Host "test = 4"}
     5 {Write-Host "test = 5"}
     default {Write-Host "test > 5 или значение не определено"}
}

دورات

يحتوي PowerShell على عدة أنواع من الحلقات: بينما ، افعل بينما ، افعل حتى ، FOR ، و FOREACH.

تعمل الحلقة ذات الشرط المسبق إذا / طالما أنها صحيحة:

[int]$test = 0
while ($test -lt 10) {
      Write-Host $test
      $test = $test + 1
}

سيتم تشغيل الحلقات ذات الشرط اللاحق مرة واحدة على الأقل ، لأنه يتم التحقق من الحالة بعد التكرار. في الوقت نفسه ، يعمل DO WHILE عندما يكون الشرط صحيحًا ، ولا يعمل حتى يظل خطأ:

[int]$test = 0
do {
      Write-Host $test
      $test = $test + 1 
}
while ($test -lt 10)



[int]$test = 0
do {
      Write-Host $test
      $test = $test + 1 
}
until ($test -gt 9)

عدد مرات تكرار حلقة FOR معروف مسبقًا:

for ([int]$test = 0; $test -lt 10; $test++) {
       Write-Host $test
}

في حلقة FOREACH ، تتكرر على عناصر مصفوفة أو مجموعة (جدول التجزئة):

$test_collection = "item1", "item2", "item3"
foreach ($item in $test_collection)
{
        Write-Host $item
}

المصفوفات

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

$test_array = @() #создаем пустой массив

عندما تتم تهيئة المصفوفة ، تُدرج قيمها مفصولة بفواصل (عامل خاص ،):

$test_array = @(1, 2, 3, 4) # создаем массив из четырех элементов 

في معظم الحالات ، يمكن حذف عامل التشغيل @ ():

$test_array = 1, 2, 3, 4

في هذه الحالة ، يتم تهيئة مصفوفة من عنصر واحد على النحو التالي

$test_array = , 1

يتم الوصول إلى عناصر المصفوفة باستخدام فهرس عدد صحيح قائم على الصفر ومشغل الفهرس (الأقواس المربعة):

$test_array[0] = 1

يمكنك تحديد عدة فهارس مفصولة بفواصل ، بما في ذلك. يتكرر:

$test_array = "один", "два", "три", "четыре"
$test_array[0,1,2,3]
$test_array[1,1,3,3,0]

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

عامل .. (نقطتان - عامل تشغيل النطاق) يُرجع مصفوفة من الأعداد الصحيحة ضمن الحدود العليا والسفلى المحددة. على سبيل المثال ، ينتج التعبير 1..4 مصفوفة من أربعة عناصر @ (1 ، 2 ، 3 ، 4) ، والتعبير 8..5 ينتج مصفوفة @ (8 ، 7 ، 6 ، 5).

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

باستخدام عامل تشغيل النطاق ، يمكنك تهيئة مصفوفة ($ test_array = 1..4) أو الحصول على شريحة (شريحة) ، أي تسلسل عناصر من مصفوفة مع مؤشرات من أخرى. في هذه الحالة ، يشير الرقم السالب -1 إلى العنصر الأخير في المصفوفة ، و -2 - العنصر قبل الأخير ، وهكذا.

$test_array = "один", "два", "три", "четыре"
$test_array[0..2]
$test_array[2..0]
$test_array[-1..0]
$test_array[-2..1]

لاحظ أن قيم صفيف الأعداد الصحيحة يمكن أن تكون أكبر من قيمة الفهرس القصوى لصفيف البيانات. في هذه الحالة ، يتم إرجاع جميع القيم حتى آخر قيمة:

$test_array[0..100]

إذا حاولت الوصول إلى عنصر صفيف واحد غير موجود ، فسيتم إرجاع $ null.

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

في PowerShell ، يمكن أن تحتوي المصفوفات على عناصر من أنواع مختلفة أو يمكن كتابتها بشدة:

$test_array = 1, 2, "тест", 3, 4
for ([int]$i = 0; $i -lt $test_array.count; $i++)
{
          Write-Host $test_array[$i]
}

حيث تكون الخاصية test_array.count $ هي عدد عناصر المصفوفة.

مثال على إنشاء مصفوفة مكتوبة بقوة:

[int[]]$test_array = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

جداول تجزئة

هناك نوع أساسي آخر من المتغيرات في لغة PowerShell وهي جداول التجزئة ، والمعروفة أيضًا باسم المصفوفات الترابطية. Hashtables تشبه كائنات JSON وهي مبنية على أساس القيمة الرئيسية. على عكس المصفوفات العادية ، يتم الوصول إلى عناصرها بواسطة مفاتيح مسماة ، وهي خصائص الكائن (يمكنك أيضًا استخدام عامل تشغيل الفهرس - الأقواس المربعة).

يتم التصريح عن جدول تجزئة فارغ باستخدام الرمز @ وأقواس عامل التشغيل:

$test_hashtable = @{}

عند التصريح ، يمكنك إنشاء مفاتيح على الفور وتعيين قيم لها:

$test_hashtable = @{one="один"; two="два"; three="три"; "some key"="some value"}

لإضافة عنصر إلى جدول تجزئة ، يجب عليك تعيين مفتاح غير موجود له بعد ، أو استخدام طريقة Add (). إذا تم تعيين مفتاح موجود ، ستتغير قيمته. تُستخدم طريقة Remove () لإزالة عنصر من جدول التجزئة.

$test_hashtable."some key"
$test_hashtable["some key"]
$test_hashtable.Add("four", "четыре")
$test_hashtable.five = "пять"
$test_hashtable['five'] = "заменяем значение"
$test_hashtable.Remove("one")

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

يمكن تمرير المتغيرات من هذا النوع كوسيطات للوظائف وأوامر cmdlets - في المقالة التالية سوف ندرس كيفية القيام بذلك ، وننظر أيضًا في نوع آخر مشابه - PSCustomObject.

وظائف

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

function имя-функции (аргумент1, ..., аргументN) 
{ 
        тело-функции 
} 

تُرجع الدالة دائمًا نتيجة - إنها مصفوفة من نتائج جميع عباراتها ، إذا كان هناك أكثر من واحد. إذا كان هناك عبارة واحدة فقط ، يتم إرجاع القيمة الوحيدة من النوع المقابل. يضيف بناء القيمة العائد $ عنصرًا بقيمة $ value إلى المصفوفة الناتجة ويوقف تنفيذ قائمة العبارات ، وتعيد الدالة الفارغة $ null.

على سبيل المثال ، دعنا ننشئ دالة لتربيع رقم:

function sqr ($number)
{
      return $number * $number
}

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

sqr 2

او مثل هذا:

sqr -number 2

بسبب الطريقة التي يتم بها تمرير الوسيطات ، تحتاج الوظيفة نفسها أحيانًا إلى أن تكون محاطة بأقواس:

function test_func ($n) {}
test_func -eq $null     # функция не вызывалась
(test_func) -eq $null   # результат выражения — $true

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

عند وصف دالة ، يمكنك تعيين قيم افتراضية للوسيطات:

function func ($arg = value) {
         #тело функции
}

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

معالجة الخطأ

يحتوي PowerShell على آلية Try ... Catch ... أخيرًا للتعامل مع الاستثناءات. تحتوي كتلة المحاولة على الرمز الذي قد يحدث فيه خطأ ، وتحتوي كتلة Catch على معالجها. إذا لم يكن هناك خطأ ، فلن يتم تنفيذه. يتم تنفيذ كتلة أخيرًا بعد كتلة المحاولة ، بغض النظر عن حدوث خطأ ، ويمكن أن يكون هناك عدة كتل Catch لأنواع مختلفة من الاستثناءات. الاستثناء نفسه مكتوب إلى متغير افتراضي غير معلن ($ _) ويمكن استرجاعه بسهولة. في المثال أدناه ، نطبق الحماية ضد إدخال قيمة غير صالحة:

try {

        [int]$test = Read-Host "Введите число"
        100 / $test

} catch {

         Write-Warning "Некорректное число"
         Write-Host $_

}

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

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

ما هو Windows PowerShell وماذا يتم تناوله؟ الجزء الثاني: مقدمة في لغة البرمجة

المصدر: www.habr.com

إضافة تعليق