הסוג מחרוזת כנראה הסוג הכי פופולרי של משתנה ב־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.
לדוגמה, נניח שתצטרך להריץ תוכנית של פקודת שורת פקודה שדורשת ממך להעביר אליה שם קובץ. נתיב הקובץ עשוי להכיל רווחים ולכן תצטרך להקיף את ההפניה הזו בסימני גרש כפולים. בלעדיו, utility.exe לא יכול לפרש את הפרמטר של הקובץ בצורה נכונה.
עכשיו נניח שתרצה לעשות זאת בתסריט של PowerShell. אם אתה משתמש במחרוזות המתרחבות, זה ייראה מעט מבלבל כי עליך להשתמש בסימן backtick כדי לברוח מסימני הגרש הכפולים.
עכשיו, נקבל את אותו התוצאה עם אופרטור התבנית.
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!
סיכום
הפעם הבאה שתמצא את עצמך צריך להחליף משתנים בתוך מחרוזת, חשוב לחשוב על איזו שיטה תהיה הכי נקראת. זה יחסוך לך זמן בטווח הארוך.
לפוסטים נוספים הקשורים לעבודה עם מחרוזות, היה בטוח לבדוק החיתוך של PowerShell: מציאת מחרוזת בתוך מחרוזת ו־ משתנים PowerShell במחרוזות.
Source:
https://adamtheautomator.com/powershell-string-format/