السلاسل في PowerShell هي عبارة عن نوع البيانات الأكثر استخدامًا في PowerShell. من عرض الرسائل وطلب المدخلات، أو إرسال البيانات إلى الملفات، فمن المستحيل تقريبًا كتابة النصوص البرمجية بدون استخدام السلاسل.
في هذه المقالة، ستتعلم أن السلاسل ليست مجرد للقراءة والعرض. يمكن أيضًا تعديلها لتناسب الغرض من أي مهمة يمكنك كتابة النص البرمجي لها. مثل استبدال الأحرف أو الكلمات بأكملها، أو دمج السلاسل لتشكيل سلسلة جديدة، أو حتى تقسيم سلسلة واحدة إلى عدة سلاسل.
فهم السلاسل
وفقًا لتعريف .NET للسلسلة – “السلسلة هي مجموعة متسلسلة من الأحرف تُستخدم لتمثيل النص”. باختصار، طالما هناك تسلسل من الأحرف يشكل نصًا، فهناك سلسلة.
تعريف السلاسل في PowerShell
تعرف السلاسل عن طريق وضع سلسلة من الأحرف بين علامات اقتباس بسيطة أو مزدوجة. فيما يلي أمثلة على سلسلة.
السلاسل في الواقع هي سلاسل النظام في .NET.
كما يمكنك رؤية من المثال أعلاه، السلسلة الأولى محاطة بعلامة اقتباس بسيطة، والسلسلة الثانية محاطة بعلامة اقتباس مزدوجة. إذا كنت تتساءل، الفرق الوحيد بينهما هو أن السلاسل المحاطة بعلامة اقتباس مزدوجة تدعم توسيع السلسلة، بينما الاقتباس بسيط سيعتبر السلسلة حرفية فقط.
للتأكيد على مفهوم الاقتباس البسيط مقابل الاقتباس المزدوج، عندما تقوم بلصق كلا السلسلتين من المثال أعلاه في PowerShell.
الصورة أدناه تُظهر أن سلسلة محددة بين علامتي اقتباس تعيد السلسلة الحرفية الأصلية بالضبط كما تم تعريفها. بينما تُعيد سلسلة محددة بين علامتي اقتباس مزدوجة السلسلة بنتيجة التعبير الناتج عن cmdlet Get-Date
.

تُظهر النتيجة المعروضة أعلاه التمييز بين متى يكون مناسبًا استخدام اقتباس واحد أو اقتباس مزدوج عند تعريف السلاسل.
كائن السلسلة
كما ذُكر في القسم السابق ، فإن مجموعة الأحرف التي تشكل نصًا هي سلسلة. القيمة الناتجة للسلسلة هي كائن السلسلة. كائن السلسلة هو كائن .NET من النوع [System.String].
وبما أن System.String هو كائن ، فإن لديه خصائص يمكنك الوصول إليها باستخدام cmdlet Get-Member
. فيما يلي نقوم بإدراج متغير داخل سلسلة مع اقتباس مزدوج.
تُظهر الصورة أدناه اسم النوع والقائمة الجزئية لخصائص كائن السلسلة.

دمج سلاسل PowerShell
يُصف دمج السلاسل كدمج سلسلتين أو أكثر معًا ، مما يؤدي في الأساس إلى إنشاء كائن سلسلة واحد من عدة كائنات سلسلة منفصلة. هناك عدة طرق في PowerShell لدمج السلاسل. كل طريقة مختلفة ، والتي يجب استخدامها يعتمد على كيفية تنفيذ دمج السلاسل.
A typical example of using string concatenation in the real world is Active Directory user creation. Perhaps you’re creating a user creation script that takes the first name, last name, and department values from a list.
باستخدام تجميع السلاسل، يمكنك صياغة النمط القياسي للاسم واسم العرض واسم المستخدم وعنوان البريد الإلكتروني. في هذا المثال، ستعمل مع السلاسل المعروضة أدناه. قم بنسخ هذا الكود أدناه ولصقه في جلسة PowerShell الخاصة بك.
باستخدام قيم المتغيرات العينة أعلاه، الهدف هو استنتاج القيم التالية المدرجة أدناه عن طريق تجميع السلاسل معًا.
- الاسم = الاسم الأول الاسم الأخير
- اسم العرض = الاسم الأول الاسم الأخير (القسم)
- اسم حساب سام = الاسم الأول.الاسم الأخير
- عنوان البريد الإلكتروني = الاسم الأول.الاسم الأخير@contoso.com
في الأقسام التالية، سيتم إنشاء القيم المذكورة أعلاه باستخدام طرق تجميع السلاسل المختلفة المتاحة في PowerShell.
لنبدأ!
باستخدام مشغل تجميع السلاسل في PowerShell
لغات البرمجة لديها مشغل خاص بها لتجميع السلاسل المستخدمة لتجميع السلاسل. على سبيل المثال، في الـ Visual Basic، طريقة التجميع هي علامة واحدة (&). تحتوي PowerShell أيضًا على طريقة تجميع خاصة بها، وهي علامة زائد (+).
باستخدام مشغل تجميع السلاسل، يمكنك تجميع السلاسل باستخدام الكود أدناه.
استخدام توسعة السلاسل في PowerShell
استخدام توسعة السلسلة قد يكون الأسلوب الذي يؤدي إلى أقصر كود عند دمج السلاسل. سترى من الكود أدناه أن كل ما يلزم هو ترتيب السلاسل كما يجب أن تظهر ووضعها داخل علامات اقتباس مزدوجة.
ثم يقوم PowerShell بتفسير ومعالجة توسع السلسلة داخل سلسلة الاقتباس المزدوجة لإخراج السلسلة المدموجة كنتيجة. يمكنك الإشارة إلى الناتج العيني أدناه.

استخدام عامل تنسيق PowerShell
يُستخدم عامل التنسيق (-f
) بشكل أساسي للتنسيق المركب. ما يهم أن تتذكره هو أنه مع هذا الأسلوب، هناك ثلاثة أجزاء لاستخدام -f
.
انظر إلى السطر الثالث من الكود أدناه. "{0} {1}"
يمثل التنسيق والفواصل المكانية. الأرقام داخل الأقواس التجاويف تشير إلى فهرس السلسلة في المجموعة لعرضها في مكانها. يمكن أن تكون الاقتباسات اقتباسات مفردة أو مزدوجة.
المجموعة من السلسلة كإدخال في هذا المثال تمثلها $firstname,$lastname
. هذا يعني أن فهرس المتغير $firstname
هو 0، بينما فهرس $lastname
هو 1.
أخيرًا ، -f
هو المكان الواقع بين العنصر النائب وتجميعة السلاسل الممثلة بواسطة (-f
).
سيؤدي الكود أعلاه إلى النتائج المعروضة أدناه.

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

طريقة .NET String.Format()
يعد الأسلوب .NET String.Format نظيرًا لعامل التنسيق في PowerShell. يعمل بنفس طريقة عامل التنسيق حيث يتعين تحديد التنسيق والعناصر النائبة.
توضح اللقطة أدناه طريقة العمل الخاصة بـ طريقة String.Format.

طريقة .NET String.Concat()
طريقة أخرى لدمج السلاسل هي استخدام طريقة .Net String.Concat. تُعد طريقة .NET String.Concat نظيرًا لعامل اتصال السلاسل في PowerShell (+
). ولكن بدلاً من استخدام علامة + لدمج السلاسل ، يمكنك إضافة جميع السلاسل داخل الطريقة مثل هذا – [string]::Concat(string1,string2...)
.
يوضح الصورة أدناه نتيجة استدعاء طريقة .NET String.Concat. يمكنك أن ترى أن PowerShell قد دمجت string1 و string2.

طريقة .NET String.Join()
طريقة .NET String.Join هي النظيرة لعامل الدمج في PowerShell (-join
). التنسيق لهذه الطريقة هو [string]::Join(<delimiter>,<string1>,<string2>,...)
.
العنصر الأول داخل طريقة -Join هو دائمًا الفاصلة. ثم قيم العناصر التالية هي السلاسل التي ترغب في دمجها. انظر إلى الكود المثال أدناه. تذكر، العنصر الأول هو دائمًا الفاصلة. إذا كنت لا ترغب في إضافة فاصلة، فيمكنك تحديد هذا —> ''
.

تقسيم سلاسل PowerShell
لقد رأيت عدة طرق مختلفة لدمج السلاسل في القسم السابق. في هذا القسم، ستتعلم عن الطرق المختلفة لاستخدام PowerShell لتقسيم السلاسل. تقسيم السلاسل هو العملية العكسية للدمج.
يمكنك تقسيم السلاسل في PowerShell بطريقتين مختلفتين – وظيفة / طريقة split()
أو المشغل split
.
تقسيم السلاسل باستخدام طريقة Split()
إذا كنت تبحث عن طريقة بسيطة لتقسيم سلسلة لإنشاء مصفوفة ، فلا تبحث بعيدًا عن طريقة split()
. تتوفر طريقة split()
في كائن السلسلة ويمكنها تقسيم سلسلة إلى مصفوفة استنادًا إلى حرف غير تنظيمي.
على سبيل المثال ، إذا كان لديك سلسلة مثل green|eggs|and|ham
وترغب في إنشاء مصفوفة مثل @('green','eggs','and','ham')
، يمكنك تقسيم هذه السلسلة باستخدام رمز العمود (|
) كما هو مبين في مقطع الكود التالي.
سوف ترى بعد ذلك أن PowerShell قسم السلسلة في المصفوفة المطلوبة باستخدام رمز العمود.
تعد طريقة split()
طريقة بسيطة لتقسيم السلاسل ولكنها محدودة. لا تسمح طريقة split()
بتقسيم السلاسل باستخدام التعبيرات العادية. إذا كنت بحاجة إلى قدرات متقدمة أكثر لتقسيم سلسلة ، فستحتاج إلى التعرف على المشغل split
.
المشغل -Split
المشغل الرئيسي الذي يمكن استخدامه لتقسيم السلاسل في PowerShell هو المشغل -Split
. باستخدام المشغل -Split
، يتم تقسيم السلاسل بين الفراغات افتراضيًا ، أو باستخدام أحرف فاصلة محددة.
فيما يلي بناء جملة المشغل -Split
للإشارة. تذكر أن تلاحظ الفرق بين تقسيم ثنائي وأحادي.
في هذا المثال، تحتوي المتغير $string
على قيمة سلسلة نصية واحدة. ثم، باستخدام عامل الانقسام -Split
، سيتم تقسيم السلسلة النصية الواحدة إلى مصفوفة سلسلة نصية في PowerShell. يتم حفظ سلسلة الانقسام الناتجة في المتغير $split
.
كما يمكن رؤية من النتيجة أعلاه، تم تقسيم السلسلة النصية الأولية إلى 7 سلاسل فرعية. يوضح ذلك كيف قام PowerShell بتقسيم سلسلة نصية إلى مصفوفة.
محدد الحروف
في المثال السابق، قام عامل الانقسام -Split
بتقسيم كائن السلسلة النصية الواحدة إلى سلاسل فرعية متعددة حتى بدون تحديد محدد؛ وذلك لأن محدد الانقسام الافتراضي لعامل -Split
هو المسافة البيضاء. ولكن يمكن استخدام محددين آخرين مثل الحروف، السلاسل، الأنماط، أو كتل النصوص.
في هذا المثال، يتم استخدام محدد الفاصلة المنقوطة ;
.
عند اختبار الشيفرة أعلاه في PowerShell، ستحصل على النتيجة التالية.

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

النتيجة أعلاه تظهر أن حروف الفاصل لم يتم حذفها، وتم احتسابها في السلاسل الفرعية الناتجة.
فاصل السلسلة
يمكن أيضًا تقسيم السلاسل بواسطة سلسلة أخرى كفاصل. في هذا المثال، يتم استخدام السلسلة “day” كفاصل.
فاصل كتلة الشيفرة
A scriptBlock as the delimiter enables the -Split operator to perform custom or complex splitting of strings.
في الأمثلة السابقة، يتم استخدام حرف الفاصل أو سلسلة الفاصل لتقسيم السلاسل. باستخدام كتلة الشيفرة، يمكنك إنشاء تعبير يستخدم بشكل فعال أكثر من فاصل واحد.
المثال أدناه يستخدم التعبير {$PSItem -eq 'e' -or $PSItem -eq 'y'}
الذي يعني أن السلسلة ستتم تجزئتها إذا كان الحرف الوارد هو 'e'
أو 'a'
.
وعند تشغيل هذا الأمر أعلاه، سيتم طباعة الأجزاء الفرعية التي تم تجزئتها باستخدام حروف الفاصل المحددة في التعبير في كتلة البرنامج.

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

فاصل النص العادي
بشكل افتراضي، يستخدم عامل الانقسام -Split
تطابق الـ RegEx التي تحدد الفاصل. وهذا يعني أنه يمكنك أيضًا استخدام RegEx كفواصل لتجزئة السلاسل.
في هذا المثال التالي، يحتوي السلسلة على أحرف كلمات وأحرف غير كلمات. الهدف هو تقسيم السلسلة باستخدام أي أحرف غير كلمات. في التعبير العادي، يتم تمثيل الأحرف غير الكلمات بواسطة \W
، بينما يتم تمثيل الأحرف الكلمات التي تطابق هذه الأحرف – [a-zA-Z0-9_]
بواسطة \w
.
تحديد الأجزاء الفرعية
من الممكن أيضًا إيقاف عملية تقسيم السلسلة إلى عدد من الأجزاء الفرعية. الخيار الذي يمكن استخدامه لتحقيق تحديد عدد الأجزاء الفرعية هو معلمة <Max-substrings>
.
عند الرجوع إلى بناء الأمر -Split، معلمة <Max-substrings>
هي المعلمة التي تلي مباشرة المعلمة <Delimited>
. يتم عرض البناء النحوي مرة أخرى أدناه للرجوع إليه.
وباستخدام بناء الأمر أعلاه، يتم تعديل الكود المثال أدناه لتحديد عدد تقسيم/أجزاء فرعية إلى 3.
وعند تشغيل الكود أعلاه، يتم تقسيم السلسلة إلى ثلاثة أجزاء فقط. تم تجاوز الفواصل المتبقية.

الآن، إذا كنت ترغب في تحديد الأجزاء الفرعية، ولكن بالعكس، يمكنك تغيير قيمة معلمة <Max-substrings>
إلى قيمة سلبية. في هذا المثال التالي، تم تغيير <Max-substrings>
إلى -3
.
ونتيجة للكود المعدل أعلاه، تم تقسيم السلسلة بدءًا من آخر ثلاث فواصل تطابقت.

العثور واستبدال السلاسل
في هذا القسم، ستتعلم عن الطريقتين التي يمكن استخدامهما للبحث عن سلسلة وأداء استبدال السلسلة في PowerShell. طريقة Replace()
ومشغل -Replace
.
طريقة Replace()
الكائن السلسلة لديه أيضًا طريقة مدمجة يمكن أن تساعد في أداء عمليات البحث والاستبدال – طريقة replace()
. تأخذ طريقة replace()
حدًا أقصى من أربعة تحميلات زائدة.
المجموعة المقبولة من التحميلات الزائدة لطريقة replace()
مدرجة أدناه.
التحميلات الزائدة الوحيدة المطلوبة هي <original>
و <substitute>
. <ignoreCase>
و <culture>
اختيارية.
في المثال أدناه، سيقوم الكود بالبحث في جميع حالات ظهور حرف الفاصلة (,
) واستبدالها بفاصلة منقوطة (;
).
بالإضافة إلى استبدال حرف واحد فقط، يمكنك أيضًا استخدام طريقة replace()
للبحث عن سلاسل واستبدالها. يقوم الكود في المثال أدناه باستبدال الكلمة “day” بـ “night”.

replace()
methodمشغل الاستبدال -Replace
يتم عرض بناء الجملة لمشغل الاستبدال أدناه.
باستخدام بناء الجملة أعلاه، يقوم الكود في المثال أدناه باستبدال الكلمة “day” بـ “Night” باستخدام مشغل -replace
.

-replace
operatorهذا المثال التالي يستخدم تطابق RegEx لاستبدال السلاسل باستخدام عامل -replace
. الكود أدناه يبحث في here-string عن السلسلة التي تطابق (#.
) ويقوم بتبديلها بـ nothing.

-replace
استخراج السلاسل من سلاسل
تحتوي كائن السلسلة على طريقة تسمى SubString()
. تُستخدم طريقة SubString()
لاستخراج سلاسل داخل سلاسل في مواقع محددة. يتم عرض بناء الجملة لطريقة SubString()
أدناه.
قيمة startIndex
هي مؤشر الموضع الذي ستبدأ فيه طريقة SubString()
البحث. المعلمة length
تشير إلى عدد الحروف التي يتم إرجاعها ابتداءً من startIndex
. المعلمة length
اختيارية، وإذا لم يتم استخدامها، فسوف تعيد طريقة SubString()
جميع الحروف.
استخراج سلسلة فرعية من موضع بدء وطول ثابت
يُستدعى الكود الصادر أدناه الجزء من قيمة سلسلة $guid
ابتداءً من المؤشر 9 ويعيد بالضبط 5 حروف تليها.
استخراج سلسلة فرعية من موضع بدء ديناميكي
يوضح المثال التالي كيفية استخدام خاصية طول السلسلة في PowerShell لتعريف مؤشر بدء ديناميكي.
يفعل الكود أدناه ما يلي:
- يحصل على طول كائن السلسلة.
- يحصل على مؤشر المؤشر المتوسط عن طريق قسمة الطول على 2.
- يستخدم الفهرس الأوسط كفهرس بداية السلسلة الفرعية.
نظرًا لعدم تحديد قيمة length
، فإن طريقة Substring()
تعيد جميع الأحرف من فهرس البداية.

مقارنة سلاسل PowerShell
يمكنك استخدام PowerShell لمقارنة السلاسل أيضًا باستخدام طرق الكائن النصي المدمجة مثل طرق CompareTo()
و Equals()
و Contains()
. أو بواسطة استخدام عوامل المقارنة في PowerShell.
استخدام طريقة CompareTo()
تُرجع طريقة CompareTo()
قيمة 0 إذا كانت السلاسل الاثنتين لها نفس القيمة. على سبيل المثال ، يقارن الكود أدناه كائني سلسلة.
ونظرًا لأن القيم متطابقة ، يجب أن تكون النتيجة 0 ، كما هو موضح أدناه.

CompareTo()
method to compare stringsاستخدام طريقة Equals()
و -eq
يمكن استخدام طريقة Equals()
ومشغل -eq
للتحقق مما إذا كانت قيمة السلسلتين متساوية.
يستخدم المثال أدناه طريقة Equals()
لمقارنة قيم $string1
و $string2
.
يجب أن يُرجع الكود أعلاه False
لأن قيم $string1
و $string2
غير متساوية.

Equals()
methodيستخدم الكود الموالي أدناه -eq
بدلاً من ذلك لمقارنة قيم $string1
و $string2
.
كما يمكنك أن ترى من النتيجة أدناه ، فإن النتيجة عند استخدام -eq
وطريقة Equal()
هما نفسهما.

-eq
operatorاستخدام طريقة Contains()
في هذا المثال ، يتم مقارنة سلسلتين بالتحقق مما إذا كانت سلسلة PowerShell تحتوي على سلسلة فرعية من سلسلة أخرى.
يوضح الكود أدناه أن قيم $string1
و $string2
ليست متساوية. ومع ذلك ، قيمة $string2
هي سلسلة فرعية من $string1
.
يجب أن يكون نتيجة الكود أعلاه True
، كما هو موضح أدناه.

Contains()
method