כיצד להפעיל סקריפט PowerShell משורת הפקודה ועוד

אם אתה חדש בשפת התסריט PowerShell ורוצה ללמוד איך להריץ תסריט PowerShell, הגעת לפוסט הבלוג הנכון. בפוסט הזה תמצא הדרכה שתכסה דרכים נפוצות להריץ תסריטים וכמה בעיות שעלולות להתעורר.

דרישות מראש

מאמר זה יהיה הדרכה עבורך על איך להריץ PowerShell על המחשב המקומי שלך. אם ברצונך להתקדם, נא לוודא שיש לך את הדרישות הבאות לפני שמתחילים את המאמר הזה.

  • A Windows 10 computer with Administrator privileges.
  • Windows גרסת PowerShell 5 או גבוהה יותר. באפשרותך גם להשתמש ב- PowerShell v7. ההדרכה הזו תתמקד ב-Windows PowerShell מאחר ומערכת ההפעלה של Windows כבר כוללת אותה.
  • עורך קבצי טקסט כלשהו

התמודדות עם מדיניות ההרצה

אם זה הפעם הראשונה שאתה מנסה להריץ תסריט PowerShell של Windows, ייתכן ותתקל בבעיה נפוצה. ייתכן ו-PowerShell יחזיר הודעת שגיאה שאומרת שתסריט "לא ניתן לטעון מאחר שהרצת תסריטים מושבתת במערכת זו".

PS> .\GetServices.ps1
 File C:\Temp\GetServices.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at
 https:/go.microsoft.com/fwlink/?LinkID=135170.
 At line:1 char:1
 .\GetServices.ps1
 ~~~~~ CategoryInfo          : SecurityError: (:) [], PSSecurityException
 FullyQualifiedErrorId : UnauthorizedAccess   

PowerShell מחזיר את הודעת השגיאה למעלה כאשר אתה מנסה להפעיל PowerShell עם מדיניות ביצוע שמוגדרת להיות Restricted, Remote Signed או All Signed.

Restricted

Restricted היא המדיניות ברירת המחדל למחשבי Windows. אם אתה משתמש ב-PowerShell לפעם הראשונה, כנראה שהמדיניות הברירת מחדל שלך תהיה מוגדרת להגביל את כל הסקריפטים.

עדיין תוכל לבצע פקודות יחידות בטרמינל, אך לא קובץ סקריפט. ההגבלה כוללת כל קובץ שמסתיים ב־.ps1xml, .psm1 או .ps1.

Unrestricted

Unrestricted מאפשרת לך להפעיל כל סקריפט, אך היא מזהירה לפני ביצוע אם הסקריפט נורה מהאינטרנט. כלל זה הוא כמעט תמיד המוגדר כברירת מחדל להתקנים שאינם מבוססי Windows.

Remote Signed

מדיניות Remote Signed מאפשרת לך להפעיל כל סקריפט שהוא או (א) חתום דיגיטלית או (ב) סקריפט שנכתב על מחשבך המקומי עם או בלעדי חתימה.

אם סקריפט נורה מהאינטרנט ואינו חתום, עליך לבצע פעולה של פתיחת הקובץ. ניתן לעשות זאת על ידי לחיצה ימנית על הקובץ ובחירת מאפיינים. או, ניתן להשתמש בפקודה של PowerShell בשם Unblock-File לאותו קובץ סקריפט מסויים.

שימוש במדיניות Remote Signed הוא אפשרות אידיאלית כאשר אתה מפעיל סקריפט שנורה מהאינטרנט.

All Signed

במדיניות All Signed נדרש שכל הסקריפטים יהיו חתומים דיגיטלית על ידי מו"מ מהימין. זה כולל גם את הסקריפטים הנורים מהאינטרנט והנכתבים מקומית על המחשב שלך.

שינוי מדיניות הביצוע ב-PowerShell

כדי לשנות את מדיניות הביצוע:

  1. פתח את Windows PowerShell כמנהלהפעל כמנהל כך שתוודא שיש לך הרשאות גבוהות ביותר לביצוע שינויים במדיניות.
Search PowerShell in Start Menu

2. כאשר הפתח, הפעל את הפקודה של PowerShell הבאה כדי להגדיר את מדיניות הביצוע של המחשב שלך. מדיניות הביצוע, כפי שנדבך לעיל, יכולה להיות אחת משלושה סוגים שונים. במדריך זה, אנו משתמשים במדיניות ביצוע שימושית ובטוחה עדיין של RemoteSigned.

מכיוון שהמדריך מניח שהורדת מהאינטרנט את קובץ הסקריפט GetServices.ps1, הגדר את מדיניות הביצוע ל RemoteSigned.

PS> Set-ExecutionPolicy RemoteSigned

מדיניות הביצוע RemoteSigned דורשת ממך ל חתום באמצעות יישות הסימון הקריפטוגרפית על כל סקריפט PowerShell המורדף מהאינטרנט לפני ש-PowerShell יפעיל אותו במערכת שלך.

3. אתה אמור לראות פלט המבקש אישור לפעולה. הזן Y ולחץ Enter כדי לאשר את שינוי מדיניות הביצוע.

Execution Policy Change
 The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose you to the
 security risks described in the about_Execution_Policies help topic at https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to
 change the execution policy?
 [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): 

בנקודה זו, עקוב אחרי השלבים הבאים לחקור שיטות שונות להפעלת סקריפט PowerShell במחשב שלך.

איך להפעיל סקריפט PowerShell

להציג את הרצת קובץ סקריפט PowerShell, יש לך בפועל צורך בקובץ סקריפט להפעלה! אם אין לך קובץ כזה ליד, הורד את קובץ ה-ZIP הזה וחלץ את קובץ ה-PS1 מתוכו. תמצא שם קובץ סקריפט פשוט בשם GetServices.ps1.

Write-Output "Listing Computer Services"
Get-Service

כל קובץ סקריפט PowerShell צריך לסיים בסיומת .ps1.

שימוש בקונסולה

כשיש לך סקריפט מוכן, ישנם כמה דרכים שונות להפעיל קובץ סקריפט PowerShell. אחת מהדרכים הנפוצות היא דרך קונסולת ה-PowerShell.

כדי לעשות זאת:

  1. פתח את קונסולת ה-PowerShell כפי שמוצג למעלה.

2. נווט למיקום במערכת הקבצים שבו נמצא הסקריפט שלך באמצעות פקודת ה-PowerShell Set-Location או השם הקצר cd. הסקריפט בהדרכה נמצא בתיקייה C:\Temp.

PS> cd C:\Temp\

3. הפעל את הסקריפט באמצעות הסימן נקודה (.). PowerShell הוא מעטפת שגם מחפשת אחר שמות פקודות. כדי להבחין בין פקודת PowerShell ובין סקריפט, עליך לשים קדימה לסקריפט עם נקודה. נקודה זו מייצגת את התיקייה הנוכחית.

 PS> .\GetServices.ps1

איך להפעיל סקריפט PowerShell מהשורת פקודה דרך מיקום ה-PowerShell

אם אין לך אפשרות או אם אתה מעדיף שלא להפעיל סקריפטים דרך קונסולת ה-PowerShell, יש אפשרות גם לעשות זאת דרך שורת הפקודה (command prompt).

להריץ סקריפטים דרך מסוף הפקודה, עליך תחילה להפעיל את קובץ ה־PowerShell (powershell.exe), עם מיקום ה־PowerShell של C:\Program Files\WindowsPowerShell\powershell.exe ולאחר מכן להעביר את נתיב הסקריפט כפרמטר אליו.

באפשרותך להריץ סקריפטים עם פרמטרים בכל קשר על ידי פשוט לציין אותם בעת הפעלת קובץ ה־PowerShell באופן הבא: powershell.exe -Parameter 'Foo' -Parameter2 'Bar'.

לאחר שאתה פותח את cmd.exe, ניתן לבצע סקריפט של PowerShell כמצויין למטה. בדוגמה זו נפעיל את המנוע ונעביר לו את נתיב הסקריפט של C:\Temp\GetServices.ps1.

שים לב שבדוגמה למעלה משתמשים בנתיב המיקום של PowerShell כדי להריץ את הסקריפט. עליך לעשות זאת אם התיקייה לא נמצאת במיקום PATH שלך במקום כלשהו.

CMD> C:\Program Files\WindowsPowerShell\powershell.exe "C:\Temp\GetServices.ps1"

המיקום של PowerShell ל־PowerShell 7 משתמש בקובץ ה־executable השונה בשם pwsh.exe שבדרך כלל נמצא במיקום C:\Program Files\PowerShell\7\pwsh.exe.

למטה יש סרטון ב־YouTube שיכול לעזור בביצוע סקריפט דרך קובץ batch אותו cmd.exe מפעיל.

שימוש ב־PowerShell ISE

אם אתה יוצר סקריפטים משלך או עורך סקריפטים של אחרים, כנראה שתשתמש בעורך סקריפטים כמו PowerShell ISE או אולי Visual Studio (VS) Code. מאחר שה־ISE כלול בחלונות, נרכז בשיטה זו לצורך המדריך הזה.

להפעיל סקריפט דרך ISE:

  1. נווט לתפריט ההתחלה, חפש את PowerShell ISE ופתח אותו.
Search PowerShell ISE in Start Menu

2. לחץ על קובץפתח ומצא את הסקריפט שלך.

Open Script using File Menu

3. בסקריפט פתוח, לחץ על לחצן הרץ ירוק כדי לבצע את הסקריפט. כפתור זה יפעיל את הסקריפט בטרמינל המובנה של PowerShell בתחתית.

Run Script using PowerShell ISE

פלט של סקריפט הדוגמא

A PowerShell script can sometimes return output. This happens when the script you’re executing is built to return objects which is a fundamental component of PowerShell.

אם תפעיל את סקריפט הדוגמא GetServices.ps1, תראה את התוצאה הבאה. סקריפט זה מפעיל את הפקודה Get-Service שמחזירה את כל השירותים שמותקנים במחשב Windows המקומי שלך.

PS> .\GetScripts.ps1
Listing Computer Services
Status   Name               DisplayName
------   ----               -----------
Running  aakore             Acronis Agent Core Service
Stopped  AarSvc_1b668d      Agent Activation Runtime_1b668d
Running  AcronisActivePr... Acronis Active Protection Service
Running  AcronisCyberPro... Acronis Cyber Protection Service
Running  AcrSch2Svc         Acronis Scheduler2 Service
Running  AdobeARMservice    Adobe Acrobat Update Service
Running  AdobeUpdateService AdobeUpdateService
Running  AGMService         Adobe Genuine Monitor Service
Running  AGSService         Adobe Genuine Software Integrity Se...
----Truncated----

הרצת סקריפט PowerShell מתוך סקריפט אחר

נניח שיש לך שני סקריפטים ותרצה שאחד יקרא לשני. אולי יש לך סקריפט בשם GetUser.ps1 ואחד בשם ResetPassword.ps1. בתוך סקריפט ה-GetUser.ps1, תרצה לבצע את ResetPassword.ps1 כדי לאפס סיסמת משתמש.

בתוך סקריפט הקריאה (GetUser.ps1), עליך להוסיף שורה לביצוע הסקריפט האחר די כמו שתקרא לסקריפט מהשורת פקודה.

אפשר לראות למטה שיש לך מספר אפשרויות. כדאי לבחור לרוץ בסקריפט השני באותה ישיבה או טווח כדי לפשט את התהליך, אלא אם יש לך סיבה מסוימת להפעיל את הסקריפט בשולי PowerShell אחר.

## להפעיל את הסקריפט האחר בהפעלה חדשה
powershell.exe .\ResetPassword.ps1
## להפעיל את הסקריפט האחר באותה הפעלה
.\ResetPassword.ps1

Source:
https://adamtheautomator.com/run-powershell-script/