النوع النصي هو على الأرجح النوع الأكثر شيوعًا في PowerShell. لا أعتقد أنني كتبت أي سيناريو لم يحتوي على نص واحد على الأقل. النصوص رائعة لتحديد مجموعة بسيطة من الأحرف مثل اسم الكمبيوتر، مسار إلى ملف نصي، مسار مفتاح سجل، عنوان URL وما إلى ذلك. من خلال توسيع المتغيرات داخل النصوص واستخدام قدرات تنسيق النص في PowerShell، يمكنك القيام بأي شيء تقريبًا.
تم تعريف النصوص عن طريق وضع أحرف واحدة أو أكثر داخل علامات اقتباس فردية أو مزدوجة مثل:
تعريف النصوص بهذه الطريقة أمر بسيط ولكن قريبًا ستجد نفسك بحاجة إلى الحصول على قيمة متغير داخل النصوص.
على سبيل المثال، ربما يكون لديك سيناريو مع معلمة ComputerName
وفي سيناريوك، تحتاج إلى دمج بادئة قياسية بها مثل SRV- كما هو موضح أدناه.
قيمة المتغير $ComputerName
الآن هي SRV-URANUS ولكن وضع $ComputerName
داخل النص بعلامات اقتباس مزدوجة هو طريقة واحدة فقط لإدراج المتغيرات في النص. هناك بعض الطرق المختلفة لتحقيق ذلك. دعونا نلقي نظرة على مثالين.
توسيع النصوص
الطريقة الأولى هي واحدة قد تكون بالفعل مألوفة لديك، تسمى توسيع النصوص، أو ببساطة توسيع المتغيرات داخل النصوص الحالية. هذه هي الطريقة الأكثر شيوعًا لجلب قيمة متغير إلى الظهور في النص.
للقيام بذلك، يتطلب وضع المتغير داخل النص بعلامات اقتباس مزدوجة. لن تعمل الاقتباسات الفردية لأنها تعامل جميع الأحرف بشكل حرفي.
على سبيل المثال، ربما أحتاج إلى تحديد المسار إلى ملف. أعرف مسار المجلد الأساسي ولكن ليس اسم الملف الفعلي بعد. قد أقوم بإنشاء متغير يُدعى $FullPath
وإدخال مسار المجلد بشكل ثابت، ولكن جعل اسم الملف متغيراً.
ماذا لو كنت بحاجة إلى تحديد خاصية الكائن داخل سلسلة؟ يبدو هذا مختلفاً قليلاً. في هذه الحالة، أحتاج إلى أن أحيط الخاصية بالأقواس وأضع علامة دولار في الأمام. هذا ما يُسمى بعامل التعبير الفرعي. يُخبر هذا PowerShell بتوسيع القيمة أولاً.
توسيع السلسلة شائع جدا ولكن ماذا لو كانت لديك سلسلة أكثر تعقيدا؟
استخدام عامل تنسيق السلسلة في PowerShell
طريقة أخرى لضمان إدراج قيم المتغيرات في سلاسلك هي من خلال عامل تنسيق PowerShell (-f
).
باستخدام عامل التنسيق، لا يتعين عليك وضع المتغير أو الخاصية داخل سلسلة محاطة بعلامات اقتباس مزدوجة. يمكنك إنشاء سلسلة بعلامات اقتباس مفردة وتحديد المتغيرات التي ستُدخل في تلك السلسلة خارجها كما هو موضح أدناه.
يمكنك رؤية أن لها نفس التأثير تماما. على الرغم من أن هذه المرة لم تكن عليك استخدام علامات اقتباس مزدوجة أو القلق بشأن إحاطة خاصية الكائن بأقواس وعلامة دولار أخرى. يبدو أنها أنظف قليلاً ولكن قد تكون أصعب في الفهم. باستخدام عامل التنسيق، يُجبرك على استبدال {0}
بـ $File.Name
في ذهنك.
لإضافة متغيرات أخرى، يمكنك ببساطة زيادة تسمياتك بمقدار 1 ومتابعة إضافة المتغيرات مفصولة بفاصلة إلى عامل التنسيق. طالما أن موقع فهرس عامل التنسيق يتطابق مع الموقع في تسمية السلسلة يمكنك إضافة العديد من المراجع كما تريد.
عند استخدام عامل التنسيق
I usually prefer to place variables inside of the string and expand them because I don’t have to match an index with a value. However, there are exceptions, as in the case of special characters that must be escaped.
على سبيل المثال، لنقل أنك بحاجة لتنفيذ أداة سطر أوامر تتطلب منك تمرير اسم ملف إليها. يمكن أن يحتوي مسار هذا الملف على فراغات لذا ستحتاج إلى وضع تلك المرجع بين علامتي اقتباس مزدوجة. بدون تلك العلامات التنصيص المزدوجة، قد لا تستطيع الأداة.exe تفسير الوسيطة بشكل صحيح.
الآن لنقل أنك تريد القيام بذلك في سكريبت PowerShell. إذا كنت تستخدم سلاسل التوسيع، ستبدو الأمور مربكة قليلاً لأنه يجب عليك استخدام علامة العلامة العكسية للخروج من علامات الاقتباس المزدوجة.
الآن، دعنا نحصل على نفس النتيجة باستخدام عامل التنسيق.
I don’t have to use any escape characters. This may seem like a simple example but as soon as you come across large strings that require a lot of escaping you will soon see the real benefit of using the format operator!
الملخص
في المرة القادمة التي تجد نفسك تحتاج إلى استبدال المتغيرات داخل سلسلة، فكر في الطريقة التي يكون فيها الأمر أكثر قراءةً. سيوفر لك ذلك الوقت في المدى الطويل.
للمزيد من المقالات المتعلقة بالعمل مع السلاسل، تأكد من التحقق من The PowerShell Substring: Finding a string inside a string و PowerShell Variables in Strings.
Source:
https://adamtheautomator.com/powershell-string-format/