פוורשל הוא כלי שורת פקודה אך הידעת שאפשר גם להשתמש בו כבסיס לממשקים גרפיים? לפעמים השימוש בשורת פקודה אינו הכי טוב לסוג מסוים של ממשק. בניית ממשק משתמש גרפי עבור שולחן העזרה שלך באמצעות PowerShell הוא דוגמה נהדרת לכך. זהו אחד מאותם רגעים שבהם יותר ראוי לבנות כלים גרפיים.
Not a reader? Watch this related video.
כאשר אתה אפשר עמוד אימות של המשתמש הסופי בעת איפוס סיסמאות בשולחן העזרה. צמצום הרגישות להנדסה חברתית שלך עם Specops Secure Service Desk. צרו איתנו קשר להדגמה!
פוורשל יכול להשתמש בפונקציונליות ותכונות של .NET ולחשוף אותן. כתוצאה מכך, אפשר לכתוב ממשקי משתמש גרפיים עבור התסריטים שאתה יוצר. בניית ממשקי משתמש ב-PowerShell עשויה להראות מורכבת, במיוחד אם אתה מתחיל.
אך אם יש לך ניסיון בסיסי בתסריטות PowerShell, אין סיבה שלא תלמד ותשתדל להתאים את המימוש של יצירת ממשק גרפי לתסריטים שלך.
בפוסט הזה, תלמד איך ל יצור PowerShell ממשק באמצעות מסגרת התצוגה של Windows (WPF).
דרישות מוקדמות
לפני שתתקדם, ודא שאתה עומד בדרישות הבאות:
- ויזואל סטודיו 2017 או מאוחר יותר – תשתמש בזה כדי ליצור את ממשק המשתמש הגרפי באמצעות WPF. תוכל להוריד גרסה חינמית/קהילתית.
- A script editor – I use Visual Studio Code, but you can also use another text editor of your choice. Some other options are Notepad++ and the built-in PowerShell ISE
- A Windows 10 computer with Windows PowerShell 5.1.
בניית התסריט
בפוסט זה, תיצור תסריט פשוט בשם Main.ps1. בתוך התסריט, תכתוב קוד שיביא מידע על דיסק ממערכת מקומית או מרחוק על ידי שאילתת המחלקה WMI Win32_LogicalDisk.
תצטרך תסריט לעטוף גרפיקה מעליו בראשונה. בחרתי להשתמש בתסריט שמאפשר לך לספק שם מחשב ולשאול את מידע הדיסקים. זה לא הכרחי לבניית גרפיקה, אף פעם. השתמש בטכניקות שתלמד בפוסט זה כדי להתאים את הגרפיקה שלך לתסריטים שלך.
כדוגמת תסריט, אני איצור פונקציה שבוצעות בהם פעולות אלו:
- לקבל קלט לשם המחשב לשאילתה
- לשאול את המחשב ולאחסן את מידע הדיסקים הקבועים במשתנה
- להחזיר את התוצאות
כתיבת הפונקציה
למטה היא הפונקציה שתשתמש בה לפרויקט זה, בשם Get-FixedDisk
. מטרת הפרויקט היא לקבל מידע על הדיסקים הקבועים או הדיסקים הקבועים במכונה היעד.
בעוד שחלק זה של הקוד יכול לשמש כמו שהוא, יהיה מועיל ליצור גרפיקה אם תרצה פשוט לבצע שאילתה מהירה מבלי להיות צריך להשתמש בפונקציה ולהקליד את הפקודות ידנית כל פעם.
ניתן לראות שהוספתי בקוד param() . זה על מנת להורות לפונקציה לקבל קלטים בהתאם לסוג הנתונים המצויין.
בדוגמה, הוספתי פרמטר Computer
המקבל ערך מחרוזת. גם, על ידי הוספת התכונה Mandatory
לפרמטר, מוודאים שהפונקציה לא תרוץ אם הפרמטר Computer
לא יוגדר בזמן הרצה.
לבסוף, שורה 18 מציגה את פקודת השאילתת WMI המשיגה את רשימת כל הדיסקים הלוגיים ושומרת את התוצאות במשתנה בשם $DiskInfo
. נוסף סינון כדי לקבל רק את הדיסקים עם DriveType=3
. הסינון מבטיח שתוצג רק מידע על דיסקים קבועים מקומיים.
ייבוא הקוד (Dot Sourcing)
בנקובי כרגע יש לך סקריפט פעיל ואתה מוכן לבדוק אותו. אך לפני שתוכל לבדוק את הסקריפט, עליך לייבא את הקוד לסשן של PowerShell. דרך אחת לטעון קוד לסשן של PowerShell היא על ידי dot sourcing.
כדי לבצע dot source לסקריפט, יש להקליד נקודה (.
) ורווח לפני נתיב הסקריפט. אם הסקריפט נמצא בתיקייה C:\PoshGUI-sample, ניתן לבצע dot source כמו בדוגמה הבאה.
ניתן גם לציין את הנתיב המלא אם אתה לא בתיקייה הנוכחית. בקוד הדוגמה שלמטה, תראה את הנתיב המלא של הסקריפט.
עכשיו שיש לנו את הקוד מיובא לזיכרון, נוכל להמשיך ולבדוק את הפונקציה שיצרנו. בדוגמה למטה, מוצג שהפונקציה Get-FixedDisk
נעשית שימוש בכדי לשאול את המחשב poshLabExc.
בניה של ממשק המשתמש של PowerShell
בנקובי, יש לך כבר את קובץ הסקריפט בשם Main.ps1, ובתוך הסקריפט יצרת את הפונקציה Get-FixedDisk
. כמו כן, אתה יכול לבדוק ולוודא שהפונקציה עובדת.
עכשיו שאתה יודע שהסקריפט עובד, תוכל להתחיל לבנות את ממשק המשתמש הגרפי.
עיצוב טופס PowerShell GUI
תתחיל ראשית לתכנן איך אתה רוצה שממשק המשתמש ייראה ואילו אלמנטים תרצה להשתמש בהם. לדוגמה פשוטה כזו יש לנו:
- a text box where the computer name can be entered
- a button to execute the function
- a text box where we can display the results
אז תוכל להתחיל לבנות!
כדי להתחיל ליצור את ממשק המשתמש, פתח את Visual Studio וצור פרויקט חדש.
פעם שה-Visual Studio פתוח, לחץ על File (1) –> New (2) –> Project (3).

בחלון New Project, בחר Visual C# (1), בחר WPF App (.NET Framework) (2), שנה את השם ל- PoshGUI-sample (3) ולחץ על OK.

ברגע שהפרוייקט נוצר, יוצג לך טופס ריק בשם MainWindow.xaml.

עכשיו עליך לסדר את הטופס כך שיתאים לדרישות שלנו. למטה יש את הפקדים והפורמט שתצטרך להוסיף.
- חלון
- כותרת: מידע דיסק
- גובה: 326
- רוחב: 403
- פקדים (4)
- תווית
- תוכן: "שם המחשב:"
- שוליים: 10, 10, 0, 0
- תיבת טקסט
- שם: txtComputer
- טקסט: ""
- גובה: 23
- רוחב: 174
- כפתור
- שם: btnQuery
- תוכן: שאילתה
- שוליים: 0, 13, 12, 0
- תיבת טקסט
- שם: txtResults
- טקסט: ""
- IsReadOnly: True
- שוליים: 10, 60, 0, 0
- גובה: 225
- רוחב: 373
- תווית
המראה הסופית של הטופס צריכה להיות דומה למה שמוצג בתמונה למטה. תוכל לארגן מחדש את מבנה החלון שלך בצורה שונה. תהיי יצירתית!

שילוב הסקריפט וממשק המשתמש ב- PowerShell
כשתהיה מרוצה מעיצוב שלך, את כעת יכולה להתחיל לשלב אותו עם הסקריפט.
PowerShell אינו יכול להציג טפסים בצורה טבעית. כדי להציג את הטופס, אנו צריכים להוסיף שורת קוד בראש הסקריפט שלנו כדי לתמוך בהצגת טפסי WPF.
לאחר מכן, הוסף קוד לביצוע הפעולות הבאות:
- ייבא וקרא את קוד ה- XAML של הטופס.
- צור באופן דינמי משתנים המשויכים לכל פקד שקולט.
- הצג את הטופס
למטה יש הקוד המעודכן בסקריפט שלך.
הערה: וודא שאתה משנה את השורה
$xamlFile
ומצביע על הנתיב המלא של קובץ ה-XAML שלך.
הערה:
$Null = $window.ShowDialog()
חייבת תמיד להיות השורה האחרונה בקוד בתוך הסקריפט שלך.
כאשר אתה מפעיל את הקוד הזה על ידי ביצוע הסקריפט Main.ps1, אתה אמור לראות את תוצאות הדוגמה למטה.

כפי שאתה יכול לראות, השלושה שלטים הקרויים קיבלו את המשתנים שלהם. שמות המשתנים הללו ייעזרו מאוחר יותר בסקריפט כשנוסיף קוד לוגיקת שלטים.
- var_btnQuery
- var_btnComputer
- var_txtResults
שימו לב שבנקודה זו התסריט יכול רק להציג את הטופס, אך השליטים אינם שימושיים מאחר ולא הוספתם קוד עדיין.
הוספת קוד אירוע לחיצת הכפתור
עכשיו ששיניתם בהצלחה את התסריט כך שהוא מייבא ומציג את ממשק המשתמש הגרפי, התחילו להוסיף את הקוד לשליטים כדי לאחזר ולהציג את נתוני מידע הדיסק.
בפרויקט זה, רק לכפתור btnQuery
יועבר פעולה. השליטים האחרים ישמשו רק כשליטי קלט ופלט/הצגה. זה אומר שאנו צריכים רק להוסיף קוד click ל־btnQuery
.
כדי להוסיף את הפעולת click ל־btnQuery
, הקצו את הקוד שלמטה לשם המשתנה המתאים של $var_btnQuery
. העתיקו את הקוד שלמטה והכניסו אותו בין ההפניות לקוד Get-Variable var_*
ו־$Null = $window.ShowDialog()
בתסריט.
בדיקת התסריט המוכן של PowerShell GUI
עם כל החלקים מכוסים, להלן הקוד המושלם של התסריט שלנו שמשלב את הפונקציה וממשק המשתמש של PowerShell שעיצבנו.
כפי שניתן לראות למטה, לאחר קריאת התסריט ב-PowerShell, חלונות GUI של PowerShell הופיעו. לאחר מכן תוכל להזין שם מחשב תקין כדי לבדוק את הפונקציונליות.

אמת מקורות באופן מאובטח עם שיטות אימות שמסירות את ההזדמנות להתחזות משתמש. חסום האקרים של מוקד העזרה עם Specops Secure Service Desk. נסה זאת בחינם!
סיכום
במאמר זה, למדת כיצד ליצור פונקציה פשוטה המקבלת קלט ומחזירה תוצאות. למדת גם כיצד ליצור ממשק משתמש פשוט ב- WPF PowerShell וכיצד לייבא אותו כפונקציה חזית לתסריט PowerShell שיצרת.
זהו סקריפט וממשק משתמש בסיסיים בלבד. ניתן לבצע שדרוגים רבים, כמו:
- עיצוב גודל ומקום פנוי להצגת ערכים ב-GB.
- שינוי שם התכונה שמוצגת.
- שימוש ב-GridView במקום ב-TextBox להצגת התוצאות.
- הוספת כפתור ייבוא ל־עבור על רשימת שרתים מקובץ CSV.
זה תלוי בך לשנות ולהוסיף פונקציות בהתאם לדרישות שלך.