אם נאבקת עם Windows 10, ללא ספק שמעת על PowerShell. אם ניסית לעשות משהו מפואר עם Win7 / 8.1 לאחרונה, PowerShell כנראה גם עולה. אחרי שנים של הסתמכות על שורת הפקודה של Windows וקבצי אצווה שהושלכו יחד, הגיע הזמן להתמקד במשהו חזק יותר, יותר מסתגל - טוב יותר.
PowerShell הוא תוספת עצומה לארגז הכלים של Windows, והוא יכול לעורר מעט פחד בהתחשב בעוצמה זו. האם זו שפת סקריפטים, מעטפת פקודה, שעווה רצפה? האם אתה צריך לקשר cmdlet עם מחלקת .Net מיידית כדי להפעיל עם ספקים? ומדוע כל מסמכי התמיכה מדברים על מנהלים - האם עלי להיות מנהל מקצועי של חלונות כדי להשתמש בזה?
לְהִרָגַע. PowerShell הוא חזק, אבל זה לא צריך להיות מאיים.
המדריך הבא מיועד לאלה שהריצו פקודת Windows או שתיים או ריגשו קובץ אצווה. שקול זאת כטרנספורמציה שלב אחר שלב מ- PowerShell המסקרנת ל- PowerShell.
שלב 1: ארכיב אותו
הדבר הראשון שתזדקק לו הוא PowerShell עצמו. אם אתה משתמש ב- Windows 10, כבר התקנת את PowerShell 5 - הגרסה האחרונה. (לעדכון יום השנה Win10 יש 5.1, אך לא תדעו מה ההבדל עם 5.0 של עדכון הסתיו.) Windows 8 ו- 8.1 מגיעים עם PowerShell 4, וזה מספיק טוב להרטיב את הרגליים. התקנת PowerShell ב- Windows 7 אינה קשה, אך נדרשת משנה זהירות - ועליך להתקין את .Net Framework בנפרד. JuanPablo Jofre מפרט כיצד להתקין את WMF 5.0 (Windows Management Framework), הכולל את PowerShell, בנוסף לכלים שלא סביר להניח שתשתמשו בהם בעת ההתחלה, ב- MSDN.
PowerShell מציע שני ממשקים. משתמשים מתקדמים ילכו לממשק המשתמש המלא, המכונה סביבת Scripting משולבת (ISE). למתחילים, לעומת זאת, השירות הטוב ביותר הוא על ידי PowerShell Console, ממשק טקסט פשוט שמזכיר את שורת הפקודה של Windows, או אפילו DOS 3.2.
כדי להפעיל את PowerShell כמנהל מערכת מ- Windows 10, לחץ על התחל וגלול מטה ברשימת האפליקציות אל Windows PowerShell. לחץ על שורה זו, לחץ באמצעות לחצן העכבר הימני על Windows PowerShell ובחר הפעל כמנהל. ב- Windows 8.1, חפש את Windows PowerShell בתיקיית מערכת Windows. ב- Win7 הוא נמצא בתיקיית אביזרים. באפשרותך להפעיל את PowerShell כמשתמש "רגיל" על ידי ביצוע אותו רצף אך בלחיצה שמאלית.
בכל גרסה של Windows, אתה יכול להשתמש בחיפוש Windows כדי לחפש PowerShell. ב- Windows 8.1 וב- Windows 10, אתה יכול לשים אותו ב- Ctrl-X "תפריט ההפעלה" (לחץ באמצעות לחצן העכבר הימני על נקודה ריקה בשורת המשימות ובחר מאפיינים; בכרטיסיית הניווט, סמן את התיבה החלף שורת פקודה). ברגע שפתוח זה פתוח, מומלץ להצמיד את PowerShell לשורת המשימות שלך. כן, אתה הולך כל כך לאהוב את זה.
שלב 2: הקלד פקודות Windows מיושנות
תתפלא כמה תחביר שורת הפקודה של Windows עובד כמצופה ב- PowerShell.
לדוגמה, cd
משנה ספריות (aka תיקיות) dir
ועדיין מפרט את כל הקבצים והתיקיות הכלולים בתיקיה הנוכחית.
תלוי איך אתה מפעיל את מסוף PowerShell, אתה יכול להתחיל בשעה c:\Windows\system32
או ב c:\Users\
. בדוגמה של צילום המסך, אני משתמש cd ..
(שימו לב למרחב) כדי לעלות ברמה אחת בכל פעם, ואז רץ dir
לרשימת כל הקבצים ותיקיות המשנה C:\
בספריה.
שלב 3: התקן את קבצי העזרה
פקודות כמו cd
ו dir
אינו פקודות PowerShell ילידים. הם כינויים - תחליפים לפקודות PowerShell אמיתיות. כינויים יכולים להיות שימושיים עבור אלה מאיתנו עם זיכרון אצבע שקשה להתגבר עליהם. אבל הם אפילו לא מתחילים לגעת בחלקים החשובים ביותר של PowerShell.
כדי להתחיל לחוש את PowerShell עצמה, הקלד help
ואחריו פקודה שאתה מכיר. לדוגמא, בצילום המסך אני מקליד help dir
.
העזרה של PowerShell אומרת לי שזה dir
כינוי לפקודת PowerShell Get-ChildItem
. ואכן, אם תקליד get-childitem
את PS C:\>
הפקודה, אתה רואה בדיוק את מה שראית עם dir
הפקודה.
כפי שצוין בתחתית צילום המסך, קבצי עזרה עבור PowerShell אינם מותקנים באופן אוטומטי. כדי לאחזר אותם (אתה כן רוצה להשיג אותם), היכנס ל- PowerShell במצב מנהל מערכת והקלד update-help
. התקנת קבצי העזרה תארך מספר דקות וייתכן שחסרים לך כמה מודולים - העזרה עבור NetWNV ו- SecureBoot נכשלה בהתקנת מכשיר הבדיקה שלי. אבל כשתסיים, מערכת העזרה המלאה תהיה זמינה.
מאותה נקודה, הקלד get-help
ואחריו את הפקודה ("cmdlet" ב- PowerShell speak, מבוטא "command-let") הנוגעת לך וראה את כל העזרה עבור אותו פריט. לדוגמא, get-help get-childitem
מייצר סיכום של get-childitem
האפשרויות. זה גם מבקש ממך להקליד וריאציות על הנושא. לפיכך, הדברים הבאים:
get-help get-childitem -examples
מייצר שבע דוגמאות מפורטות לשימוש get-childitem
. הפקודה PowerShell
get-help get-childitem -detailed
כולל את שבע הדוגמאות הללו, כמו גם הסבר מפורט על כל פרמטר הזמין עבור ה- get-childitem
cmdlet.
שלב 4: קבל עזרה בפרמטרים
ב help dir
צילום מסך, שאולי יש לך לב יש שני רישומים תחת SYNTAX
עבור get-childitem
. העובדה שיש שני תחבירים נפרדים ל- cmdlet פירושה שיש שתי דרכים להפעיל את ה- cmdlet. איך שומרים על תחבירים נפרדים - ומה המשמעות של הפרמטרים? התשובה קלה, אם אתה יודע את הטריק.
כדי לקבל את כל הפרטים אודות הפרמטרים עבור ה- get-childitem
cmdlet, או כל cmdlet אחר, השתמש -full
בפרמטר, כך:
get-help get-childitem -full
זה מייצר שורה אחר שורה של מה אתה יכול לעשות עם ה- cmdlet ומה עלול לקרות (או לא!). ראה את צילום המסך.
כשמדובר בפרטי הפרמטרים, קל יחסית לראות get-childitem
שניתן להשתמש בהם כדי לאחזר פריטים "צאצאים" (כגון שמות של תיקיות משנה או שמות קבצים) במיקום שתציין, עם או בלי התאמות תווים ספציפיות. לדוגמה:
get-childItem “*.txt” -recurse
מאחזר רשימה של כל *.txt
הקבצים בתיקייה הנוכחית וכל תיקיות המשנה (עקב -recurse
הפרמטר). ואילו הדברים הבאים:
get-childitem “HKLM:\Software”
מחזירה רשימה של כל מפתחות הרישום ברמה הגבוהה ב- HKEY_LOCAL_MACHINE\Software
.
אם ניסית אי פעם להיכנס לרישום באמצעות שורת פקודה של Windows או קובץ אצווה, אני בטוח שאתה יכול לראות עד כמה גישה מסוג זה חייבת להיות חזקה.
שלב 5: מסמר את השמות
יש סיבה מדוע cmdlets שראינו עד כה נראה אותו הדבר: get-childitem
, update-help
, ו get-help
כול פעלו באותה אמנה הפועל-עצם. רחמנא ליצלן, כל ה- cmdlets של PowerShell משתמשים במוסכמה זו, עם פועל לפני שם עצם (יחיד). אלה מכם שביליתם שבועות במאבק על פקודות VB ו- VBA שאינן עקביות יכולים לנשום לרווחה.
כדי לראות לאן אנחנו הולכים, עיין בכמה מהסמלונים הנפוצים ביותר (הודות לבלוג היי, סקריפט גיא! של אד וילסון). התחל עם ה- cmdlets המגיעים למערכת שלך ושלף מידע שימושי, כמו הדברים הבאים:
set-location
: מגדיר את מיקום העבודה הנוכחי למיקום מוגדרget-content
: מקבל את תוכן הקובץget-item
: מקבל קבצים ותיקיותcopy-item
: מעתיק פריט ממיקום אחד למשנהוremove-item
: מוחק קבצים ותיקיותget-process
: מקבל את התהליכים הפועלים במחשב מקומי או מרוחקget-service
: מקבל את השירותים הפועלים במחשב מקומי או מרוחקinvoke-webrequest
: מקבל תוכן מדף אינטרנט באינטרנט
כדי לראות כיצד cmdlet מסוים עובד, השתמש get-help
, כמו ב-
get-help copy-item -full
על סמך תיאור העזרה שלו, תוכלו להבין בקלות מה ה- cmdlet רוצה. לדוגמה, אם ברצונך להעתיק את כל הקבצים והתיקיות שלך Documents
אל c:\temp
, היית משתמש ב:
copy-item c:\users\[username] \documents\* c:\temp
תוך כדי הקלדת פקודה זו, תראה כמה נגיעות נחמדות המובנות בסביבת PowerShell. לדוגמה, אם אתה מקליד copy-i
ולחץ על מקש Tab, PowerShell מתמלא Copy-Item
רווח. אם אתה מקליד בטעות cmdlet ו- PowerShell לא מצליח להבין את זה, תקבל תיאור יסודי מאוד של מה השתבש.
נסה את ה- cmdlet הזה. (זה עשוי לנסות לגרום לך להתקין תוכנית שתקרא את התיבה "אודות". אם כן, התעלם ממנה.)
invoke-webrequest askwoody.com
אתה מקבל רשימה תמציתית של הצהרות התוכן של הדף, כותרות, תמונות, קישורים ועוד. לראות איך זה עובד? שים לב get-help
ברישום invoke-webrequest
כי ה- invoke-webrequest
cmdlet "מחזיר אוספי טפסים, קישורים, תמונות ורכיבי HTML משמעותיים אחרים" - בדיוק מה שאתה צריך לראות על המסך.
כמה cmdlets עוזרים לך לשלוט או לחסוך את PowerShell עצמה:
get-command
: מפרט את כל ה- cmdlets הזמינים (זו רשימה ארוכה!)get-verb
: מפרט את כל הפעלים הזמינים (חצאי ה- cmdlets השמאלי)clear-host
: מנקה את התצוגה בתוכנית המארחת
פרמטרים שונים (זכור, get-help
) מאפשרים לך להקטין את הפקודות ולהצטמצם באפשרויות שעשויות לשמש אותך. לדוגמה, כדי לראות רשימה של כל ה- cmdlets שעובדים עם שירותי Windows, נסה זאת:
get-command *-service
זה מפרט את כל הפעלים שיש עם service
שם העצם. הנה התוצאה:
Get-Service
New-Service
Restart-Service
Resume-Service
Set-Service
Start-Service
Stop-Service
Suspend-Service
אתה יכול לשלב cmdlets אלה עם cmdlets אחרים כדי לחפור כמעט לכל חלק ב- PowerShell. שם נכנסים לתמונה צינורות.
שלב 6: הביאו את הצינורות
אם אי פעם השתמשת בשורת הפקודה של Windows או עברת בקובץ אצווה, אתה יודע על ניתוב מחדש וצינורות. במילים פשוטות, גם ניתוב מחדש ( >
התו) וגם הצינורות ( |
הדמות) לוקחים את הפלט מפעולה ומדביקים אותה למקום אחר. אתה יכול, למשל, להפנות את פלט dir
הפקודה לקובץ טקסט, או "להקפיץ" את התוצאה של ping
פקודה ל- a find
, כדי לסנן תוצאות מעניינות, כך:
dir > temp.txt
ping askwoody.com | find “packets” > temp2.txt
בפקודה השנייה למעלה, find
הפקודה מחפשת את המחרוזת packets
בפלט הצינור של askwoody.com ומדביקה ping
את כל השורות התואמות בקובץ שנקרא temp2.txt
.
אולי באופן מפתיע, הראשונה מבין הפקודות האלה עובדת מצוין ב- PowerShell. כדי להפעיל את הפקודה השנייה, אתה רוצה משהו כזה:
ping askwoody.com | select-string packets | out-file temp2.txt
שימוש בניתוב מחדש ובצינורות מרחיב מאוד את יכולות שורת הפקודה של Windows: במקום לגלול אינסוף לאורך המסך ולחפש מחרוזת טקסט, למשל, אתה יכול להרכיב פקודת Windows צינורית שעושה את הבדיקה עבורך.
ל- PowerShell יכולת צנרת, אך היא אינה מוגבלת לטקסט. במקום זאת, PowerShell מאפשר לך להעביר אובייקט שלם מ- cmdlet אחד למשנהו, כאשר "אובייקט" הוא שילוב של נתונים (הנקראים מאפיינים) והפעולות (שיטות) שניתן להשתמש בהן על הנתונים.
החלק הקשה, לעומת זאת, טמון ביישור האובייקטים. סוג האובייקט שמספק cmdlet אחד צריך להתאים לסוגי האובייקטים המקובלים על cmdlet המקבל. טקסט הוא סוג פשוט מאוד של אובייקט, כך שאם אתה עובד עם טקסט, פריטים קלים בשורה. חפצים אחרים אינם כה ראשוניים.
איך להבין את זה? ברוך הבא ל- get-member
cmdlet. אם אתה רוצה לדעת איזה סוג אובייקט מייצר cmdlet, צינור אותו get-member
. לדוגמה, אם אתה מנסה להבין את התהליכים הפועלים במחשב שלך, וצמצמת את האפשרויות ל- get-process
cmdlet, כך תגלה מה ה- get-process
cmdlet מייצר:
get-process | get-member
הפעלת פקודה זו מייצרת רשימה ארוכה של מאפיינים ושיטות get-process
, אך בתחילת הרשימה תוכלו לראות את סוג האובייקט get-process
שיוצר:
TypeName: System.Diagnostics.Process
המסך שלמטה גם אומר לך כי get-process
יש מאפיינים שנקראים Handles
, Name
, NPM
, PM
, SI
, VM
, ו WS
.
אם ברצונך לתפעל את הפלט של get-process
כך שתוכל לעבוד איתו (בניגוד להצגת רשימה ארוכה של תהליכים פעילים על הצג), עליך למצוא cmdlet אחר שיעבוד איתו System.Diagnostics.Process
כקלט. כדי למצוא cmdlet מוכן, אתה פשוט משתמש ב ... המתן לו ... PowerShell:
get-command -Parametertype System.Diagnostics.Process
זה מייצר רשימה של כל ה- cmdlets שיכולים להתמודד System.Diagnostics.Process
.
חלק מה- cmdlets ידועים לשמצה בלקיחת כמעט כל סוג של קלט. ראשי ביניהם: where-object
. אולי באופן מבלבל, where-object
עובר דרך כל פריט שנשלח בצינור, אחד אחד, ומיישם את כל קריטריוני הבחירה שתבקש. יש סמן מיוחד שנקרא $_
. המאפשר לך לעבור על כל פריט בצינור, אחד בכל פעם.
נניח שרצית לבוא עם רשימה של כל התהליכים הפועלים במחשב שלך המכונים " svchost
" - ב- PowerShell לדבר, אתה רוצה להתאים Name
למאפיין של svchost
. נסה את הפקודה PowerShell הזו:
get-process | where-object {$_.Name -eq “svchost”}
ה- where-object
cmdlet מסתכל על כל System.Diagnostics.Process
פריט, ומשווה את .Name
הפריט של אותו פריט ל- " svchost
"; אם הפריט תואם, הוא יורק בקצה הצינור ומוקלד על הצג שלך. ראה את צילום המסך.