ה Power Shell הראשון שלי
החדשות הגדולות הן שהחלטתי לתת צ'אנס ל Windows אחרי שהתייאשתי מלמצוא פיתרון גיבוי טוב ללינוקס על הלפטופ. החדשות היותר קטנות הן שניצלתי את ההזדמנות ללמוד Power Shell - ואת המעט שהבנתי רציתי לשתף כאן בפוסט.
1. מה הסקריפט עושה
אז הדבר הראשון שאתה עושה אחרי שאתה מתקין Windows זה להפעיל את WSL שזה הלינוקס שרץ בתוך ה Windows. יש מנגנון די מסובך שבסך הכל עובד לא רע, אבל הוא לא כולל עדיין תמיכה ביישומים גרפיים. הפיתרון המקובל הוא להרים שרת X ואז לעדכן את משתנה הסביבה DISPLAY כדי שהתוכנית תכתוב ל X שרץ בחלונות.
ופה אנחנו נכנסים ל Power Shell.
המשימה שלנו היא להריץ אימקס כדי שאפשר יהיה לכתוב פוסטים. בשביל זה צריך לגלות את כתובת ה IP של המחשב ואז להריץ את הפקודה:
> wsl.exe DISPLAY=<Windows IP Address>:0 emacs
2. הקוד עצמו וקצת על Power Shell
נתחיל עם הסקריפט עצמו ששמור אצלי בקובץ בשם emacs.ps1:
$ip=Get-NetIPAddress -InterfaceAlias "vEthernet (WSL)" -AddressFamily IPv4|select -expand IPAddress
Invoke-Expression -Command "wsl DISPLAY=${ip}:0 emacs"
בסך הכל שתי שורות אבל מאוד עמוסות, הנה ההסבר (הלא בטוח מדויק) שלי מה זה עושה:
משתנים ב Power Shell מוגדרים באמצעות סימן
$
ולכן השורה הראשונה מגדירה משתנה חדש בשם$ip
אפשר להשתמש בסימן
=
בשורה בשביל השמה. מתוך הרגל הצמדתי את הכל בלי רווח אבל זה יעבוד גם אם נשים רווחים מסביב לסימן השווה (טירוף).הפקודות ב Power Shell מורכבות בדרך כלל משתי מילים עם מקף ביניהן, כשהמילה הראשונה מתארת מה רוצים לעשות והשניה מתוך איזה מודול או אוביקט. אז Get-NetIPAddress אומרת שאנחנו רוצים לקחת את הפרטים של התקן הרשת.
לפקודה יש אופציות שאנחנו מעבירים עם סימן
-
כמו שאנחנו מצפים, אבל אופציה הפעם הוא מילה שלמה ולא אות בודדת. האופציהInterfaceAlias
אומרת איזה ממשק רשת אנחנו רוצים לקבל, והאופציה AddressFamily עוזרת לסנן איזה מהכתובות אנחנו רוצים.סימן
|
עושה בדיוק מה שהייתם מצפים, ומעביר את התוצאה של הפקודה לפקודה הבאה בשורה. אבל - ופה הקסם - ב Power Shell כל התוצאות הן אוביקטים ולא סתם טקסטים, ולכן אנחנו צריכים פקודות מיוחדות שלהם כדי לקחת שדות מסוימים מתוך האוביקטים (או להדפיס אותם בצורה מסוימת או כל דבר בסגנון).הפקודה select לוקחת שדה אחד מתוך האוביקט שקיבלה. האופציה
expand
מחזירה את התוכן של השדה עצמו בלי שם השדה.השורה הבאה היא גם הפקודה הבאה -
Invoke-Expression
והיא פשוט מפעילה תוכנית שאנחנו מעבירים לה בתור מחרוזת. את הקריאה מהמשתנה אני מפריד משאר המחרוזת עם סוגריים מסולסלים כדי ש Power Shell לא יחשוב שהנקודותיים אפס הם חלק משם המשתנה או קשורים למשתנה באיזשהו אופן.
3. איך מריצים סקריפט Power Shell
בניגוד ליוניקס, קובץ ps1 של Power Shell לא ניתן להפעלה רגילה מכל מיני סיבות אבטחה. במקום זה אנחנו צריכים ליצור Shortcut חדש שיכיל את ה Target הבא:
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -ExecutionPolicy Bypass -File C:\Users\ynonp\ps1\emacs.ps1
את הקיצור הזה כבר אפשר להפעיל באמצעות לחיצה כפולה על ה Shortcut, או אפילו יותר טוב אם תשימו אותו בתוך התיקיה:
C:\Users\<Your Username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\
אז הקיצור יתווסף לתפריט "התחל" ותוכלו למצוא ולהפעיל אותו דרך התפריט או דרך כל Launcher שיש לכם.