Go pro: המדריך למשתמש החשמלי ל- PowerShell

אם נאבקת עם 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-childitemcmdlet.

שלב 4: קבל עזרה בפרמטרים

ב help dirצילום מסך, שאולי יש לך לב יש שני רישומים תחת SYNTAXעבור get-childitem. העובדה שיש שני תחבירים נפרדים ל- cmdlet פירושה שיש שתי דרכים להפעיל את ה- cmdlet. איך שומרים על תחבירים נפרדים - ומה המשמעות של הפרמטרים? התשובה קלה, אם אתה יודע את הטריק.

כדי לקבל את כל הפרטים אודות הפרמטרים עבור ה- get-childitemcmdlet, או כל 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-webrequestcmdlet "מחזיר אוספי טפסים, קישורים, תמונות ורכיבי 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-membercmdlet. אם אתה רוצה לדעת איזה סוג אובייקט מייצר cmdlet, צינור אותו get-member. לדוגמה, אם אתה מנסה להבין את התהליכים הפועלים במחשב שלך, וצמצמת את האפשרויות ל- get-processcmdlet, כך תגלה מה ה- get-processcmdlet מייצר:

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-objectcmdlet מסתכל על כל System.Diagnostics.Processפריט, ומשווה את .Nameהפריט של אותו פריט ל- " svchost"; אם הפריט תואם, הוא יורק בקצה הצינור ומוקלד על הצג שלך. ראה את צילום המסך.