Master PowerShell Strings: اقطع، وافصل وأكثر

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

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

فهم السلاسل

وفقًا لتعريف .NET للسلسلة – “السلسلة هي مجموعة متسلسلة من الأحرف تُستخدم لتمثيل النص”. باختصار، طالما هناك تسلسل من الأحرف يشكل نصًا، فهناك سلسلة.

تعريف السلاسل في PowerShell

تعرف السلاسل عن طريق وضع سلسلة من الأحرف بين علامات اقتباس بسيطة أو مزدوجة. فيما يلي أمثلة على سلسلة.

PS> 'Hello PowerShell - Today is $(Get-Date)'PS> "Hello PowerShell - Today is $(Get-Date)"

السلاسل في الواقع هي سلاسل النظام في .NET.

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

للتأكيد على مفهوم الاقتباس البسيط مقابل الاقتباس المزدوج، عندما تقوم بلصق كلا السلسلتين من المثال أعلاه في PowerShell.

الصورة أدناه تُظهر أن سلسلة محددة بين علامتي اقتباس تعيد السلسلة الحرفية الأصلية بالضبط كما تم تعريفها. بينما تُعيد سلسلة محددة بين علامتي اقتباس مزدوجة السلسلة بنتيجة التعبير الناتج عن cmdlet Get-Date.

Single Quote vs. Double-Quote String Output

تُظهر النتيجة المعروضة أعلاه التمييز بين متى يكون مناسبًا استخدام اقتباس واحد أو اقتباس مزدوج عند تعريف السلاسل.

كائن السلسلة

كما ذُكر في القسم السابق ، فإن مجموعة الأحرف التي تشكل نصًا هي سلسلة. القيمة الناتجة للسلسلة هي كائن السلسلة. كائن السلسلة هو كائن .NET من النوع [System.String].

وبما أن System.String هو كائن ، فإن لديه خصائص يمكنك الوصول إليها باستخدام cmdlet Get-Member. فيما يلي نقوم بإدراج متغير داخل سلسلة مع اقتباس مزدوج.

PS> "Hello PowerShell - Today is $(Get-Date)" | Get-Member=

تُظهر الصورة أدناه اسم النوع والقائمة الجزئية لخصائص كائن السلسلة.

String Object properties

دمج سلاسل 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 الخاصة بك.

$domain = 'contoso.com'
$firstname = 'Jack'
$lastname = 'Ripper'
$department = 'Health'

باستخدام قيم المتغيرات العينة أعلاه، الهدف هو استنتاج القيم التالية المدرجة أدناه عن طريق تجميع السلاسل معًا.

  • الاسم = الاسم الأول الاسم الأخير
  • اسم العرض = الاسم الأول الاسم الأخير (القسم)
  • اسم حساب سام = الاسم الأول.الاسم الأخير
  • عنوان البريد الإلكتروني = الاسم الأول.الاسم الأخير@contoso.com

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

لنبدأ!

باستخدام مشغل تجميع السلاسل في PowerShell

لغات البرمجة لديها مشغل خاص بها لتجميع السلاسل المستخدمة لتجميع السلاسل. على سبيل المثال، في الـ Visual Basic، طريقة التجميع هي علامة واحدة (&). تحتوي PowerShell أيضًا على طريقة تجميع خاصة بها، وهي علامة زائد (+).

باستخدام مشغل تجميع السلاسل، يمكنك تجميع السلاسل باستخدام الكود أدناه.

## الاسم
$firstname + ' ' + $lastname
## اسم العرض
$firstname + ' ' + $lastname + ' (' + $department + ')'
## اسم حساب سام
$firstname + '.' + $lastname
## عنوان البريد الإلكتروني
$firstname + '.' + $lastname + '@' + $domain

استخدام توسعة السلاسل في PowerShell

استخدام توسعة السلسلة قد يكون الأسلوب الذي يؤدي إلى أقصر كود عند دمج السلاسل. سترى من الكود أدناه أن كل ما يلزم هو ترتيب السلاسل كما يجب أن تظهر ووضعها داخل علامات اقتباس مزدوجة.

# استخدام توسع السلسلة
## الاسم
"$firstname $lastname"
## اسم العرض
"$firstname $lastname ($department)"
## اسم الحساب في Sam
"$firstname.$lastname"
## عنوان البريد الإلكتروني
"$firstname.$lastname@$domain"

ثم يقوم PowerShell بتفسير ومعالجة توسع السلسلة داخل سلسلة الاقتباس المزدوجة لإخراج السلسلة المدموجة كنتيجة. يمكنك الإشارة إلى الناتج العيني أدناه.

Using String Expansion

استخدام عامل تنسيق PowerShell

يُستخدم عامل التنسيق (-f) بشكل أساسي للتنسيق المركب. ما يهم أن تتذكره هو أنه مع هذا الأسلوب، هناك ثلاثة أجزاء لاستخدام -f.

انظر إلى السطر الثالث من الكود أدناه. "{0} {1}" يمثل التنسيق والفواصل المكانية. الأرقام داخل الأقواس التجاويف تشير إلى فهرس السلسلة في المجموعة لعرضها في مكانها. يمكن أن تكون الاقتباسات اقتباسات مفردة أو مزدوجة.

المجموعة من السلسلة كإدخال في هذا المثال تمثلها $firstname,$lastname. هذا يعني أن فهرس المتغير $firstname هو 0، بينما فهرس $lastname هو 1.

أخيرًا ، -f هو المكان الواقع بين العنصر النائب وتجميعة السلاسل الممثلة بواسطة (-f).

## الاسم
"{0} {1}" -f $firstname,$lastname
## DisplayName
"{0} {1} ({2})" -f $firstname,$lastname,$department
## SamAccountName
"{0}.{1}" -f $firstname,$lastname
## البريد الإلكتروني
"{0}.{1}@{2}" -f $firstname,$lastname,$domain

سيؤدي الكود أعلاه إلى النتائج المعروضة أدناه.

Using the Format Operator

استخدام مشغل PowerShell -Join

يمكن استخدام مشغل -Join لدمج السلاسل في سلسلة واحدة بطريقتين.

الطريقة الأولى لاستخدام -Join هي عن طريق تتبعه بمجموعة السلاسل التي ترغب في اتصالها. مشغل -Join لا يوفر خيارًا لإضافة فاصل. ستتم لصق جميع السلاسل في المجموعة معًا بدون أي شيء بينها.

-Join <String[]>

الطريقة الثانية لاستخدام مشغل -Join هي تحديد الفاصل المستخدم. ستتم دمج مجموعة السلاسل معًا ، ولكن سيتم إدراج الحرف المحدد كفاصل بين كل سلسلة.

<String[]> -Join <Delimiter>

عند العودة إلى هدف دمج السلاسل ، يوضح الكود أدناه كيفية استخدام مشغل -Join لتجميع السلاسل معًا.

## الاسم
$firstname, $lastname -join ' '
## DisplayName
$firstname,$lastname,"($department)" -join ' '
## SamAccountName
-join ($firstname,'.',$lastname)
## البريد الإلكتروني
-join ($firstname,'.',$lastname,'@',$domain)

عند تشغيل رمز المثال أعلاه في PowerShell ، يمكنك توقع رؤية نفس النتائج المعروضة أدناه.

Using the PowerShell Join Operator

طريقة .NET String.Format()

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

## الاسم
[string]::Format("{0} {1}",$firstname,$lastname)
## الاسم المعروض
[string]::Format("{0} {1} ({2})",$firstname,$lastname,$department)
## اسم حساب Sam
[string]::Format("{0}.{1}",$firstname,$lastname)
## البريد الالكتروني
[string]::Format("{0}.{1}@{2}",$firstname,$lastname,$domain)

توضح اللقطة أدناه طريقة العمل الخاصة بـ طريقة String.Format.

The .NET String.Format Method

طريقة .NET String.Concat()

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

## الاسم
[string]::Concat($firstname,' ',$lastname)
## اسم العرض
[string]::Concat($firstname,' ',$lastname,' (',$department,')')
## اسم الحساب في سام
[string]::Concat($firstname,'.',$lastname)
## عنوان البريد الإلكتروني
[string]::Concat($firstname,'.',$lastname,'@',$domain)

يوضح الصورة أدناه نتيجة استدعاء طريقة .NET String.Concat. يمكنك أن ترى أن PowerShell قد دمجت string1 و string2.

Using the .NET String.Concat Method

طريقة .NET String.Join()

طريقة .NET String.Join هي النظيرة لعامل الدمج في PowerShell (-join). التنسيق لهذه الطريقة هو [string]::Join(<delimiter>,<string1>,<string2>,...).

العنصر الأول داخل طريقة -Join هو دائمًا الفاصلة. ثم قيم العناصر التالية هي السلاسل التي ترغب في دمجها. انظر إلى الكود المثال أدناه. تذكر، العنصر الأول هو دائمًا الفاصلة. إذا كنت لا ترغب في إضافة فاصلة، فيمكنك تحديد هذا —> ''.

## الاسم
[string]::Join(' ',$firstname,$lastname)
## اسم العرض
[string]::Join(' ',$firstname,$lastname,"($department)")
## اسم الحساب في سام
[string]::Join('',$firstname,'.',$lastname)
## عنوان البريد الإلكتروني
[string]::Join('',$firstname,'.',$lastname,'@',$domain)
The .NET String.Join Method

تقسيم سلاسل PowerShell

لقد رأيت عدة طرق مختلفة لدمج السلاسل في القسم السابق. في هذا القسم، ستتعلم عن الطرق المختلفة لاستخدام PowerShell لتقسيم السلاسل. تقسيم السلاسل هو العملية العكسية للدمج.

يمكنك تقسيم السلاسل في PowerShell بطريقتين مختلفتين – وظيفة / طريقة split() أو المشغل split.

تقسيم السلاسل باستخدام طريقة Split()

إذا كنت تبحث عن طريقة بسيطة لتقسيم سلسلة لإنشاء مصفوفة ، فلا تبحث بعيدًا عن طريقة split(). تتوفر طريقة split() في كائن السلسلة ويمكنها تقسيم سلسلة إلى مصفوفة استنادًا إلى حرف غير تنظيمي.

على سبيل المثال ، إذا كان لديك سلسلة مثل green|eggs|and|ham وترغب في إنشاء مصفوفة مثل @('green','eggs','and','ham') ، يمكنك تقسيم هذه السلسلة باستخدام رمز العمود (|) كما هو مبين في مقطع الكود التالي.

$string = 'green|eggs|and|ham'
$string.split('|')

سوف ترى بعد ذلك أن PowerShell قسم السلسلة في المصفوفة المطلوبة باستخدام رمز العمود.

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

المشغل -Split

المشغل الرئيسي الذي يمكن استخدامه لتقسيم السلاسل في PowerShell هو المشغل -Split. باستخدام المشغل -Split ، يتم تقسيم السلاسل بين الفراغات افتراضيًا ، أو باستخدام أحرف فاصلة محددة.

فيما يلي بناء جملة المشغل -Split للإشارة. تذكر أن تلاحظ الفرق بين تقسيم ثنائي وأحادي.

# التقسيم الثنائي
-Split <String>
-Split (<String[]>)

# التقسيم الثنائي
<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]
<String> -Split {<ScriptBlock>} [,<Max-substrings>]

في هذا المثال، تحتوي المتغير $string على قيمة سلسلة نصية واحدة. ثم، باستخدام عامل الانقسام -Split، سيتم تقسيم السلسلة النصية الواحدة إلى مصفوفة سلسلة نصية في PowerShell. يتم حفظ سلسلة الانقسام الناتجة في المتغير $split.

## تقسيم السلاسل النصية إلى سلاسل فرعية
# قم بتعيين قيمة سلسلة للمتغير $string
$string = 'This sentence will be split between whitespaces'
# قم بتقسيم قيمة المتغير $string وحفظ النتيجة في المتغير $split
$split = -split $string
# احصل على عدد السلاسل الفرعية الناتجة
$split.Count
# عرض السلاسل الفرعية الناتجة
$split

كما يمكن رؤية من النتيجة أعلاه، تم تقسيم السلسلة النصية الأولية إلى 7 سلاسل فرعية. يوضح ذلك كيف قام PowerShell بتقسيم سلسلة نصية إلى مصفوفة.

محدد الحروف

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

في هذا المثال، يتم استخدام محدد الفاصلة المنقوطة ;.

## تقسيم السلاسل إلى سلاسل فرعية باستخدام فاصل
# قم بتعيين قيمة سلسلة للمتغير $string
$string = 'This;sentence;will;be;split;between;semicolons'
# قسم قيمة المتغير $string وقم بتخزين النتيجة في المتغير $split
$split = $string -split ";"
# احصل على عدد السلاسل الفرعية الناتجة
$split.Count
# اعرض السلاسل الفرعية الناتجة
$split

عند اختبار الشيفرة أعلاه في PowerShell، ستحصل على النتيجة التالية.

Splitting a String into Substrings with Character Delimiter

لاحظ من النتيجة أعلاه أن حرف الفاصل تم حذفه تمامًا من السلاسل الفرعية الناتجة.

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

$split = $string -split "(;)"
$split.Count
$split

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

Splitting a string on semicolon

النتيجة أعلاه تظهر أن حروف الفاصل لم يتم حذفها، وتم احتسابها في السلاسل الفرعية الناتجة.

فاصل السلسلة

يمكن أيضًا تقسيم السلاسل بواسطة سلسلة أخرى كفاصل. في هذا المثال، يتم استخدام السلسلة “day” كفاصل.

$daysOfTheWeek= 'monday,tuesday,wednesday,thursday,friday,saturday,sunday'
$daysOfTheWeek -split "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'.

$daysOfTheWeek= 'monday,tuesday,wednesday,thursday,friday,saturday,sunday'
$daysOfTheWeek -split {$PSItem -eq 'e' -or $PSItem -eq 'y'}

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

Splitting a String into Substrings with a Script Block Delimiter

يقوم المثال التالي بعمل أكثر بعض الشيء باستخدام كتلة البرنامج. في هذه المرة، يقوم التعبير بتقييم ما إذا كانت:

  • الحرف الوارد يمر كقيمة صحيحة؛ و
  • أن قيمته أعلى من 1

إذا كانت نتيجة التقييم صحيحة، فإن عامل الانقسام -Split سيستخدم ذلك الحرف كفاصل. تمت إضافة معالجة الأخطاء أيضًا لضمان تصفية الأخطاء.

$daysOfTheWeek= 'monday1tuesday2wednesday3thursday1friday4saturday8sunday'
$daysOfTheWeek -split {
    try {
        [int]$PSItem -gt 1
    }
    catch {
        #لا يفعل شيئًا
    }
}

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

Splitting a String into Substrings with a Script Block Delimiter

فاصل النص العادي

بشكل افتراضي، يستخدم عامل الانقسام -Split تطابق الـ RegEx التي تحدد الفاصل. وهذا يعني أنه يمكنك أيضًا استخدام RegEx كفواصل لتجزئة السلاسل.

في هذا المثال التالي، يحتوي السلسلة على أحرف كلمات وأحرف غير كلمات. الهدف هو تقسيم السلسلة باستخدام أي أحرف غير كلمات. في التعبير العادي، يتم تمثيل الأحرف غير الكلمات بواسطة \W، بينما يتم تمثيل الأحرف الكلمات التي تطابق هذه الأحرف – [a-zA-Z0-9_] بواسطة \w.

$daysOfTheWeek= 'monday=tuesday*wednesday^thursday#friday!saturday(sunday'
$daysOfTheWeek -split "\W"

تحديد الأجزاء الفرعية

من الممكن أيضًا إيقاف عملية تقسيم السلسلة إلى عدد من الأجزاء الفرعية. الخيار الذي يمكن استخدامه لتحقيق تحديد عدد الأجزاء الفرعية هو معلمة <Max-substrings>.

عند الرجوع إلى بناء الأمر -Split، معلمة <Max-substrings> هي المعلمة التي تلي مباشرة المعلمة <Delimited>. يتم عرض البناء النحوي مرة أخرى أدناه للرجوع إليه.

<String> -Split <Delimiter>[,<Max-substrings>[,"<Options>"]]

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

$daysOfTheWeek= 'monday,tuesday,wednesday,thursday,friday,saturday,sunday'
$daysOfTheWeek -split ",",3

وعند تشغيل الكود أعلاه، يتم تقسيم السلسلة إلى ثلاثة أجزاء فقط. تم تجاوز الفواصل المتبقية.

Limiting the Number of Substrings starting from the first 3 matched delimiters

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

$daysOfTheWeek= 'monday,tuesday,wednesday,thursday,friday,saturday,sunday'
$daysOfTheWeek -split ",",-3

ونتيجة للكود المعدل أعلاه، تم تقسيم السلسلة بدءًا من آخر ثلاث فواصل تطابقت.

Limiting the Number of Substrings starting from the last 3 matched delimiters

العثور واستبدال السلاسل

في هذا القسم، ستتعلم عن الطريقتين التي يمكن استخدامهما للبحث عن سلسلة وأداء استبدال السلسلة في PowerShell. طريقة Replace() ومشغل -Replace.

طريقة Replace()

الكائن السلسلة لديه أيضًا طريقة مدمجة يمكن أن تساعد في أداء عمليات البحث والاستبدال – طريقة replace(). تأخذ طريقة replace() حدًا أقصى من أربعة تحميلات زائدة.

المجموعة المقبولة من التحميلات الزائدة لطريقة replace() مدرجة أدناه.

<String>.Replace(<original>, <substitute>[, <ignoreCase>][, <culture>])

التحميلات الزائدة الوحيدة المطلوبة هي <original> و <substitute>. <ignoreCase> و <culture> اختيارية.

في المثال أدناه، سيقوم الكود بالبحث في جميع حالات ظهور حرف الفاصلة (,) واستبدالها بفاصلة منقوطة (;).

$daysOfTheWeek = 'monday,tuesday,wednesday,thursday,friday,saturday,sunday'
$daysOfTheWeek.Replace(',',';')

بالإضافة إلى استبدال حرف واحد فقط، يمكنك أيضًا استخدام طريقة replace() للبحث عن سلاسل واستبدالها. يقوم الكود في المثال أدناه باستبدال الكلمة “day” بـ “night”.

$daysOfTheWeek = 'monday,tuesday,wednesday,thursday,friday,saturday,sunday'
$daysOfTheWeek.Replace('day','NIGHT')
Replacing a matched string using the replace() method

مشغل الاستبدال -Replace

يتم عرض بناء الجملة لمشغل الاستبدال أدناه.

<string> -replace <original>, <substitute>

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

$daysOfTheWeek = 'monday,tuesday,wednesday,thursday,friday,saturday,sunday'
$daysOfTheWeek -replace 'day','NIGHT'
Replacing a matched character with the -replace operator

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

$daysOfTheWeek = @'
1. Line 1
2. Line 2
3. Line 3
4. Line 4
5. Line 5
'@
$daysOfTheWeek -replace "\d.\s",""
Replacing a RegEx match using -replace

استخراج السلاسل من سلاسل

تحتوي كائن السلسلة على طريقة تسمى SubString(). تُستخدم طريقة SubString() لاستخراج سلاسل داخل سلاسل في مواقع محددة. يتم عرض بناء الجملة لطريقة SubString() أدناه.

<String>.SubString(<startIndex>[,<length>])

قيمة startIndex هي مؤشر الموضع الذي ستبدأ فيه طريقة SubString() البحث. المعلمة length تشير إلى عدد الحروف التي يتم إرجاعها ابتداءً من startIndex. المعلمة length اختيارية، وإذا لم يتم استخدامها، فسوف تعيد طريقة SubString() جميع الحروف.

استخراج سلسلة فرعية من موضع بدء وطول ثابت

يُستدعى الكود الصادر أدناه الجزء من قيمة سلسلة $guid ابتداءً من المؤشر 9 ويعيد بالضبط 5 حروف تليها.

$guid = 'e957d74d-fa16-44bc-9d72-4bea54952d8a'
$guid.SubString(9,5)

استخراج سلسلة فرعية من موضع بدء ديناميكي

يوضح المثال التالي كيفية استخدام خاصية طول السلسلة في PowerShell لتعريف مؤشر بدء ديناميكي.

يفعل الكود أدناه ما يلي:

  • يحصل على طول كائن السلسلة.
  • يحصل على مؤشر المؤشر المتوسط عن طريق قسمة الطول على 2.
  • يستخدم الفهرس الأوسط كفهرس بداية السلسلة الفرعية.
$guid = 'e957d74d-fa16-44bc-9d72-4bea54952d8a'
$guid.SubString([int]($guid.Length/2))

نظرًا لعدم تحديد قيمة length ، فإن طريقة Substring() تعيد جميع الأحرف من فهرس البداية.

Extracting a Substring from a Dynamic Starting Position

مقارنة سلاسل PowerShell

يمكنك استخدام PowerShell لمقارنة السلاسل أيضًا باستخدام طرق الكائن النصي المدمجة مثل طرق CompareTo() و Equals() و Contains(). أو بواسطة استخدام عوامل المقارنة في PowerShell.

استخدام طريقة CompareTo()

تُرجع طريقة CompareTo() قيمة 0 إذا كانت السلاسل الاثنتين لها نفس القيمة. على سبيل المثال ، يقارن الكود أدناه كائني سلسلة.

$string1 = "This is a string"
$string2 = "This is a string"
$string1.CompareTo($string2)

ونظرًا لأن القيم متطابقة ، يجب أن تكون النتيجة 0 ، كما هو موضح أدناه.

Using CompareTo() method to compare strings

استخدام طريقة Equals() و -eq

يمكن استخدام طريقة Equals() ومشغل -eq للتحقق مما إذا كانت قيمة السلسلتين متساوية.

يستخدم المثال أدناه طريقة Equals() لمقارنة قيم $string1 و $string2.

$string1 = "This is a string"
$string2 = "This is not the same string"
$string1.Equals($string2)

يجب أن يُرجع الكود أعلاه False لأن قيم $string1 و $string2 غير متساوية.

Comparing strings with the Equals() method

يستخدم الكود الموالي أدناه -eq بدلاً من ذلك لمقارنة قيم $string1 و $string2.

$string1 = "This is a string"
$string2 = "This is not the same string"
$string1 -eq $string2

كما يمكنك أن ترى من النتيجة أدناه ، فإن النتيجة عند استخدام -eq وطريقة Equal() هما نفسهما.

Comparing strings with the -eq operator

استخدام طريقة Contains()

في هذا المثال ، يتم مقارنة سلسلتين بالتحقق مما إذا كانت سلسلة PowerShell تحتوي على سلسلة فرعية من سلسلة أخرى.

يوضح الكود أدناه أن قيم $string1 و $string2 ليست متساوية. ومع ذلك ، قيمة $string2 هي سلسلة فرعية من $string1.

$string1 = "This is a string 1"
$string2 = "This is a string"
$string1.Contains($string2)

يجب أن يكون نتيجة الكود أعلاه True ، كما هو موضح أدناه.

Comparing strings using the Contains() method

قراءة مستفيضة

Source:
https://adamtheautomator.com/powershell-strings/