עקרונות תכנות במדריך זה נעסוק באספקט התכנותי יותר של PowerShell, לכן נלמד את עקרונות התכנות הבסיסיים באמצעות PowerShell. אין צורך לכתוב את הקוד כרגע, בפרק הבא ניראה כיצד אנו כותבים סקריפט פשוט שממש את העקרונות הנ"ל.
הכרזה על משתנים: משתנה הוא מקום בזיכרון של המחשב אשר מכיל מידע אשר יכול לשנות את ערכו בזמן הריצה באמצעות פקודות הניתנות לו. לכל משתנה אנו נותנים שם (כמו למשל X) אשר מאפשר לנו להתייחס אליו. ב-PowerShell אנו מכריזים על משתנים באופן הבא:
$x = 10 $y = 15 $sum = $x + $y
הסימן $ מציין משתנה ואחריו מופיע שמו של משתנה. בדוגמא הנ"ל הכרזנו על שלושה משתנים: $x, $y, $sum . לכל משתנה נתנו ערך באמצעות סימן ה-"=". המשתנה sum$ מכיל את פעולת החיבור המתמטית של המשתנים $x ו-$y.
משתנים לא מכילים רק מספרים, הם יכולים להכיל גם מחרוזות (צירוף של אותיות) ואובייקטים שונים. בנוסף ישנם משתנים המכילים מערכים. משתנה שהוא מערך בעצם אוגר בתוכו כמה משתנים אשר ניתן להתייחס אליהם באמצעות אינדקס מסויים. אנו מכריזים על מערך באופן הבא:
$a = 10, 20, 30
כאשר אנו רוצים להתייחס למשתנה מסוים בתוך המערך אלינו להתייחס אל האינדקס שלו. אינדקס מתחיל מ-0, ז"א אם נרצה להתייחס למספר 10 במערך על האינדקס להיות 0. נתייחס למשל למשתנה השלישי במערך כך: $a[2]. תנאים: עקרון תכנות זה הוא אחד מהבסיסים והחשובים. עיקרון זה מאפשר לסקריפט שלנו לרוץ על פי תנאים מסוימים שאנו נותנים לו. לדוגמא – אם המשתנה $sum קטן יותר מ-30, נציג למשתמש את ההודעה ""Cheap ואם המשתנה גדול מ-30 נציג למשתמש את ההודעה "Expensive".
כעת ניראה כיצד אנו כותבים את קטע הקוד עם שילוב של הדוגמא הקודמת:
$x = 10
$y = 15
$sum = $x + $y
if ($sum -lt 30) {
"Cheap"
}
else {
"Expensive!"
}
שימו לב שהפעם הוספנו את תנאי. תנאי תמיד מתחיל עם המילה if. לאחר מכן, הסוגריים מכילות את התנאים עצמו. שימו לב שהסוגריים שלנו מכילות את הקטע הבא:
($sum –lt 30)
המילה "-lt" (או ליתר דיוק Operator) בעצם אומרת "קטן מ-" (Lower Then) ואחריה מופיעה המספר שנרצה להשוות (30). הסוגריים המסולסלים מכילים את הקוד שנרצה שיבוצע אם התנאי נכון. שימו לב שאחר כך מופיע קטע הקוד הבא:
else {
"Expensive!"
}
המילה "else" (אחרת) אומרת למחשב כי אם התנאי הנ"ל אינו נכון, תבצע את קטע הקוד שמתחת (המופיע בתוך הסוגריים המסולסלים של else). שימו לב – ב-PowerShell כל מחרוזת שנשים בתוך גרשיים (ללא שום פקודה) באופן אוטומטי יופיע כפלט למשתמש. אם נריץ את הסקריפט, ניראה כי יופיע לנו פלט של "Cheap". כעת אם נשנה את ערכם של אחד הערכים (x$ או y$) ולאחר מכן סכומם ביחד יעבור את ה-30 יופיע לנו פלט של "Expensive!".
לולאות: עקרון תכנות זה מאפשר לנו לבצע פעולות החוזרות על עצמן עד שתנאי מסוים יתקיים. נניח ונרצה להדפיס 30 פעמים "Hello world", באמצעות לולאה, נעשה זאת בצורה הבאה:
$x = 0
do {
"Hello world"
$x = $x + 1
} while ($x -ne 30)
הכרזנו על המשתנה $x. לאחר מכן יצרנו לולאה מסוג do…while אשר אומרת כי כול עוד מתקיים התנאי המופיע בתוך הסוגריים של ה-while על שורות הקוד בתוך הלולאה להמשיך ולהתבצע. הלולאה שלנו מבצעת את הדברים הבאים:
- מדפיסה על המסך את המילה "Hello world".
- מעלה את ערכו של $x באחד.
הלולאה בודקת בכל מחזור אם המשתנה $x אינו שווה ל-30. היא עושה זאת באמצעות האופרטור הנקרא Not Equal הנהוג לכתוב בצורה –ne . ניתן לכתוב לולאות בצורות רבות – חלקן מקלות עלינו בתהליך הכתיבה וחלקן מקשות עלינו. ניתן לקרוא על לולאות PowerShell בעמוד הבא.
נניח ונרצה לכתוב סקריפט אשר מקבל מספר לא מוגבל של מספרים מהמשתמש ומוציא פלט של סכום כול המספרים שהמשתמש הכניס. כיצד נכתוב סקריפט כזה? הסקריפט יכיל לולאה הממשיכה לקבל מהמשתמש ערכים עד שהמשתמש מקליד "stop".הסקריפט שלנו יראה כך:
$result = 0
do {
$number = Read-Host "Please write a number or type 'stop' to stop: "
if ($number -ne "stop") {
$result = $result + $number
}
else {
break
}
} while ($true)
"The sum of all the numbers you entered is: $result"
נסביר מה הולך כאן:
- המשתנה $result מכיל את התוצאה הכוללת של כל הקלט שהמשתמש הכניס. כל פעם שהמשתמש מוסיף עוד קלט, משתנה זה מחבר אליו את הערך החדש עם התוצאה הקודמת. הערך ההתחלתי שלו הוא 0.
- המשתנה $number מכיל את הקלט שהמשתמש הכניס. שימו לב לתנאי שהוספנו, תנאי זה בודק אם הקלט שהמשתמש הכניס אינו שווה ל-stop. אם התנאי מתקיים, אנו מוסיפים למשתנה $result את התוצאה שהמשתמש הכניס. אם התנאי לא מתקיים אנו משתמשים בפקודה break אשר אומרת לסקריפט שלנו לצאת מהלולאה.
- שימו לב שהתנאי להתקיימות הסקריפט שלנו בתוך ה-while הוא $true או במילים אחרות – אין סוף. מפני שהתנאי הוא תמיד "אמת" ($true היא מילה שמורה שבעצם אומרת פסוק אמת). לכן, בכדי לצאת מתוך הלולאה כמו שציינו כבר, השתמשנו בפקודה break.
והינה הסקריפט שלנו בפעולה:
כמובן שהיה ניתן לכתוב את הסקריפט בצורה הרבה יותר חכמה ופשוטה, אך לשם הכרת הפקודה break בנינו את הסקריפט כך.
תפיסת שגיאות: לא תמיד מה שאנחנו רוצים מצליח. במקרים מסוימים הסקריפטים שלנו יכשלו כאשר יגיעו לשורת קוד מסוימת. במקרים כאלה אנו יודעים כי עלינו "לתפוס" את השגיאות ולטפל בהן.
נניח ונרצה להזיז קובץ שבמקרים מסוימים עלול להיות בשימוש. כיצד נוכל "לתפוס" את השגיאה, לדווח למשתמש על כך ולהמשיך בשאר הפעולות שלנו מבלי שכל הסקריפט שלנו ייכשל? בדיוק כך:
try {
Move-Item $file $destination
"Succesfully moved $file!"
}
catch {
"Failed to move $file!"
}
זהו, כזה פשוט וכל כך יעיל.
הערות: נהוג לשים הערות במקומות מסוימים בסקריפט בכדי שנוכל להסביר לעצמנו כשנחזור לסקריפט מאוחר יותר כיצד האלגוריתם עובד או מה משתנה מסוים מביע. הערות אנו מביעים באמצעות "#" (סולמית) בתחילת השורה. דוגמא לכתיבת הערה נראית כך:
#Contains the sum of all user input
$sum = 0
הסקיפט לא עובד
הסקיפט לא עובד
מה השגיאה שמופיעה לך כשאתה מריץ את הסקריפט?
הסקריפט שלכם לוקה בחסר
בערך המיקום האינטרפטור של הקוד במערכת המאמרים באתר מורידה את סימן הבאק סלאש "/"
כניראה מוגדר לו שזה סימן מיוחד תקנו זאת.
בכל מקרה מאמר מאוד נחמד שמביא לתשומת הלב של הרבים את ה CLI המהדים הזה באמת שמייקרוסופט עשו עבודה מעולה איתו.
חבל שהוא עדין לא ממש מוכר ואין הרבה מידע של How To ברשת לגביו.
יפה מאוד
תודה.
Auto execute
How can I write a timer so this will run at specific interval?
Or save to .bat?
Set-ExecutionPolicy Unrestricted
מדריך מאוד בסיסי , מתאים להבנת הנושא .
שחכתם לציין פקודה חשובה על מנת שסקריפטים יעבדו
Set-ExecutionPolicy Unrestricted
מעולה!
תודה רבה !
obeh – תוקנו הסלאשים, תודה רבה על ההערה
תודה רבה, לא הכרתי את הpowershell בתור משתמש כבד של לינוקס זה נראה ממש טוב, אפילו יותר מvim 😉
יופי של מדריך! אתה מוזמן לראות את הבלוג שלי בנושא
קודם כל מדריך יפה מאוד שי! כל הכבוד!
ברשותי בלוג של PowerShell באנגלית –
explorepowershell.com
מיועד בעיקר לאוטמטציה של משימות מעולם הIT.
אתה מוזמן לבקר ולהתרשם (אשמח לפידבק)
סתם כדי לעשות לכם חיים קלים
תחליפו את המשתמש בערך
$env:username
SumMeR69 – הבלוג מעניין! חסר תוכן אבל אני מאמין שבעתיד הוא יתמלא
שיהיה לך בהצלחה (-: !
טעויות שיגרמו לתוכנית לא לעבוד
1.
הסלשים לא נכונים זה סלש הפוך ככה:
דבר שני אותו סלש צריך להיות בסוף הנתיב בשני המקומות היעד והמקור
ל 13
הכיוון של הסלאש לא משנה.
האינטרפטור יודע להפוך אותם בעצמו בזמן ריצה.
למרות שמבחינת תחביר יהיה נכון לתקן זאת.
ואם כבר סינטקס עסקינן
אפשר לשנות את היעד כולו ל $HOME
downloads או Pictures בהתאמה
יופי של כתבה, החכמתי
[…] למשתמשים המתקדמים יותר, כאן יש קוד ל-PowerShell שמאפשר לכם לבדוק אם העדכון מותקן אצלכם ולהסיר אותו במקרה הצורך. אם אתם עדיין לא יודעים מה זה PowerShell, כאן יש מדריך למתחילים. […]
[…] למשתמשים המתקדמים יותר, כאן יש קוד ל-PowerShell שמאפשר לכם לבדוק אם העדכון מותקן אצלכם ולהסיר אותו במקרה הצורך. אם אתם עדיין לא יודעים מה זה PowerShell, כאן יש מדריך למתחילים. […]
סודו סופריוזר מתהפך בקברו. צעד קטן למיקרוספט, נפילה גדולה ללינוקס.