29Aug

הספר החנון: למד כיצד להשתמש ב - PowerShell

click fraud protection

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

הקפד לקרוא את המאמרים הקודמים בסדרה:

  • למד כיצד להפוך את Windows עם PowerShell
  • לומד להשתמש ב- Cmdlets ב- PowerShell
  • למידה כיצד להשתמש באובייקטים ב- PowerShell
  • לימוד, סינון והשוואה ב- PowerShell
  • למד להשתמש ב- Remoting ב-PowerShell
  • באמצעות PowerShell כדי לקבל מידע על המחשב
  • עבודה עם אוספים ב PowerShell

ולהישאר מכוון עבור שאר הסדרה כל השבוע.

רקע משרות

עד עכשיו כל מה שהראיתי לך בתוך PowerShell היה סינכרוני, כלומר, אנחנו סוג משהו לתוך הקליפה ולא יכול באמת לעשות הרבה עד פקודה זו סיימה את ביצוע.זה המקום שבו מקומות עבודה ברקע נכנסים. כדי להתחיל ברקע, העבודה פשוט להעביר בלוק סקריפט אל ה- cmdlet Start-Job.

Start-Job -Name GetFileList -Scriptblock{ Get-ChildItem C: \ -Recurse}

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

כאשר אתה בועט עבודה חדשה, PowerShell יוצר אובייקט עבודה חדש המייצג את העבודה.באפשרותך לקבל רשימה של כל העבודות בכל עת על ידי הפעלת ה- Get-Job-cmdlet.

instagram viewer

אובייקטים העבודה לספר לך על מצב של מקומות עבודה.לדוגמה, במסך הנ"ל ניתן לראות כי יש לנו BackgroundJob שנקרא GetFileList אשר עדיין פועל, אבל כבר התחיל להחזיר נתונים.אם בשלב כלשהו אתה מחליט כי העבודה כבר פועל זמן רב מדי, אתה יכול בקלות לעצור אותו על ידי צנרת אותו Stop-Job.

Get-Job-Name GetFileList |Stop-Job

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

Get-Job-Name GetFileListReceive-Job-Keep

לאחר שתסיים עם עבודה, מומלץ להתאמץ.כדי להסיר את העבודה, פשוט הציפו אותה אל ה- cmdlet 'הסר עבודה'.

Get-Job-Name GetFileListRemove-Job

פעולה זו תסיר אותה מרשימת העבודות המוחזרות על ידי Get-Job.

Remote

לפני כמה שיעורים, בדקנו כיצד ניתן להשתמש ב- Remoting לביצוע פקודות PowerShell במחשב מרוחק באמצעות Invoke-Command, אבל האם ידעת שתוכל גם להשתמש ב- Invoke-Command כדי לבעוט בעבודה של Remoting ברקע?כדי לעשות זאת, פשוט להוסיף את הפרמטר -AsJob על סוף הפקודה שלך:

Invoke-Command -ComputerName פלאש, צפע, מנהל קריטי -ScriptBlock{ gci} -AsJob

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

הממ, נראה כאילו זה נכשל.זה מביא אותי על gotcha הראשון שלי עם עבודות.כאשר אתה יוצר עבודה חדשה מכל סוג שהוא ב- PowerShell, היא יוצרת עבודה של הורה אחד בנוסף לעבודה של ילד אחד עבור כל מחשב שבו אתה מנהל את העבודה.כאשר אתה משתמש ב - cmdlet Get-Job, זה רק מראה לך את עבודות האב, ואת המאפיין המדינה הוא תרחיש המקרה הגרוע ביותר, כלומר, גם אם הפקודה נכשלה רק לרוץ על אחד מתוך מאה מחשבים, המדינה משרות ההורה יאמרונִכשָׁל.כדי לראות רשימה של עבודות של ילדים עליך להשתמש בפרמטר includeChildJob.

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

ישנן שתי דרכים לעקוף את זה.ראשית, אם אתה יודע מה המחשבים שאתה רוצה את התוצאות עבור, אתה יכול פשוט להשתמש בפרמטר ComputerName של cmdlet לקבל -Job.

Get-Job -Id 3 |Receive-Job -Keep -ComputerName Viper

לחלופין, באפשרותך לקבל את התוצאות ממשימת עבודה ספציפית של הילד תוך שימוש במזהה העבודה שלו.

Get-Job -Id 3 -IncludeChildJob

Get-Job -Id 5 |קבל עבודה

WMI

WMI משרות הן הרבה יותר כמו עבודה מרחוק, המחייב רק את הפרמטר -AsJob כדי להוסיף את ה- Get-WmiObject cmdlet.

למרבה הצער, זה אומר שהם כפופים גם gotchas אותו הזכרתי בסעיף עבודות מרחוק.

Scheduled Jobs

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

הרשמה- ScheduledJob -Name GetEventLogs -ScriptBlock{ Get-EventLog -LogName Security -Newest 100} -Trigger( New-JobTrigger -Daily-5pm) -משולב JobOption( New-ScheduledJobOption-RunElevated)

יש הרבה מאוד קורה כי הפקודה, אז בואו לשבור אותו.

  • ראשית, אנו נותנים עבודה מתוזמנת שלנו בשם GetEventLogs.
  • אז אנחנו אומרים את זה כאשר מופעלים, אנחנו רוצים את זה כדי להפעיל את התוכן של בלוק סקריפט שצוין, אשר בעצם מקבל את 100 רשומות החדש של יומן האירועים אבטחה.
  • הבא, אנו מציינים גורם.מאז פרמטר ההדק לוקח אובייקט ההדק כקלט, השתמשנו פקודה הורה ליצור טריגר כי ילך כל יום בשעה 17:00.
  • מכיוון שאנו עוסקים ביומן האירועים, אנו צריכים לפעול כמנהל, אשר אנו יכולים לציין על ידי יצירת אובייקט חדש ScheduledJobOption והעברת אותו פרמטר ScheduledJobOption.

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

Get-ScheduledJob

זה כל מה שיש.