הדרכה ב-PowerCLI: ניהול תשתיות VMware

PowerCLI על ידי VMWare מתהווה לממשק הנפוץ למנהלי וירטואליזציה של היפרווייזור תומך בארכיטקטורת החומרה של ESXi. ללמוד איך לנהל את VMware באמצעות PowerShell ו-PowerCLI הוא הוספה חזקה לכלי העבודה שלך. במדריך הזה של PowerCLI, אתה הולך ללמוד בדיוק כיצד לעשות זאת.

במדריך הזה, אתה תלמד:

  • היסודות של התחברות לתשתיות VMware עם PowerCLI
  • התמכרות עם cmdlets לעבודה עם אובייקטים של VMware
  • להעצים את עצמך עם הידע לחקור
  • ניהול של VMware בצורה נוספת דרך PowerCLI

בוא נתחיל!

מה שאתה צריך להכין ולדעת

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

  • יש לך ניסיון בסיסי ב-PowerShell. אין צורך להיות מומחה ב-PowerShell, אך כל הידע שיש לך בנוגע ל-PowerShell ישרת אותך היטב.
  • יש לך מארח VMware ESXi או יישות vCenter להתחברות ולבדיקות.
  • אתה עובד על תחנת עבודה במערכת Windows (או Mac / Linux)
  • יש לך PowerCLI מותקן ומחובר כבר. אם לא, ראה מאמר זה על התקנת PowerCLI.

I’ll be using PowerCLI v 11.4.0. I will be working from a Windows 10 workstation with Windows PowerShell 5.1, but you’re welcome to use PowerShell 6 instead as there’s feature parity for this tutorial.

איסוף מידע על מארחי ESXi באמצעות PowerCLI

לפני שתתפלא בשכבת הווירטואל של הסביבה שלנו ב-vSphere, כדאי לעבור על שכבת החומרה הפיזית. VMware PowerCLI מספקת פקודה ישירה למטרה זו, לאיסוף מידע מפורט בשם Get-VMHost.

בעודך מחובר לשרת vCenter או למארח ESXi שלך, הרץ את הפקודה הבאה.

PS51> Get-VMHost
Get-VMHost

בשל כך שאני מחובר ל- vCenter Server Appliance שמנהלת שני מארחים נפרדים של ESXi, אני מקבל מידע בסיסי על המארחים שנמצאים בניהול. הפקודה Get-VMHost מאפשרת לך לעיין ביכולות החומרה של מארחי הווירטואליזציה שלך. אך כברירת מחדל, Get-VMHost אינה מחזירה את כל המידע שזמין לה.

אם תשתמש בפקודה Get-VMHost יחד עם Format-List, תקבל פלט בקונסולה לכל המידע על המארחים הנתונים.

Get-VMHost | Format-List

בנוסף, אפשר גם להיות בחורף ולבחור רק מאפיינים מסוימים באובייקט VMHost שאיתו אתה עובד כמו:

PS51> Get-VMHost | format-list -Property State,LicenseKey,Version

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

  • מידע על אימות הרישיון
  • סך הכלי של המעבד והזיכרון
  • יצרן ודגם של החומרה
  • שם המארח של DNS

לאחר הסקירה, ניתן לקמפל את זה לקובץ CSV, אולי בעזרת הפקודה Export-CSV.

בדיקת מכונות וירטואליות בעזרת PowerCLI

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

הפקודה Get-VM היא פקודה שימושית שאפשר להשתמש בה כדי לראות מידע על מכונות הווירטואליות.

PS51> Get-VMHost -Name <Host FQDN> | Get-VM

פלט של פקודה זו ייראה משהו כמו שמוצג למטה:

PS51> Get-VMHost -Name | Get-VM

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

אם אתה נתקל בבעיה כלשהי ואתה צריך לדעת את מספר מכונות הווירטואליות במארח נתון או יש לך צורך להשתמש ב-VMware PowerCLI כדי לאסוף מידע על מארח ESXi, תוכל להשתמש בפקודות אלו בעתיד. היכולות של דיווח שיש לך זמינות כעת מתרחיבות!

בדיקת מתגי ווירטואליים עם PowerCLI

עבור אלה מאיתנו שמוטרדים בתצורה או ניהול של רשתות הווירטואליות של אשכול vCenter, ישנה סדרה מלאה של פקודות רשת עבור כל מקרה שימוש. אם ברצונך לראות את המתגים הווירטואליים שמוגדרים בסביבת vSphere שלך, יש לך להשתמש בפקודות הבאות:

PS51> Get-VirtualSwitch

לפי המספר של רשתות ומתגים ווירטואליים שיש לך, רשימת התוצאות שלך עשויה להיות די גדולה. במקרה שלי, כפי שאתה רואה למטה, יש לי DSwitch יחיד המהווה Distributed Virtual Switch.

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

Get-VirtualSwitch

מציאת מכונות וירטואליות מחוברות לרשת וירטואלית באמצעות PowerCLI

בעת ניסיון להגביר את התיק והתרחק ממנו, ייתכן שתתעסק בשאלה אילו מכונות וירטואליות מחוברות לרשתות אילו. כדי לגלות זאת, ניתן להשתמש בפקודת Get-VirtualPortGroup. בואו נלמד על פקודה זו במדריך הזה של PowerCLI.

A port group is essentially a virtual network. To display all port groups, run Get-VirtualPortGroup without any parameters. You should then see a listing of all virtual port groups present in your vSphere environment.

Get-VirtualPortGroup

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

PS51> Get-VM | Where-Object { ($PSItem | Get-NetworkAdapter | where {$_.networkname -match "DPortgroup"})}

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

Getting VMs with only a specific port group

עם הפלט הזה, תוכל להגדיר אילו מכונות מחוברות ומוגדרות לכל רשת.

כאשר נדרש לאתר ולנתח אילו מכונות וירטואליות מחוברות לרשת מסוימת ב-VMware, כעת תוכל לספק פתרון לדיווח PowerCLI לשאלה זו.

קבלת מידע על גרסת המערכת הפעילה ב-VM שלך באמצעות PowerCLI

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

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

יתכן ששאלת במקום מסוים: "כמה שרתי Ubuntu יש לנו באשף ה-VMware שלנו?". ייתכן ובשלב מסוים נצרכת לך זמן רב מידי כדי לחפש את התשובה באמצעות הקלקות ב-vCenter. PowerCLI מסוגל לפשט את התהליך הזה על ידי הסתכלות על אובייקטים של מכונה וירטואלית ב-vCenter והחלת קסם של PowerShell על הפלט.

צפה בקוד הבא שמציג מידע על מכונות וירטואליות. קטע הקוד הזה משתמש בפקודת Get-View שנדבך בהקדם אבל לעכשיו עליך לדעת שזו שיטה מתקדמת לשליפת מאפייני אובייקטי VMware. במקרה זה, אנחנו מצביעים על מאפיינים מקוננים שהם הכי נגישים לשליפה באמצעות שיטה זו.

PS51> Get-VM | 
      Sort-Object -Property Name |
      Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |
      Select-Object -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}}

קוד המעלה מחזיר רשימת מכונות וירטואליות באמצעות פקודת ה-PowerCLI Get-VM, ממיין את הרשימה בעזרת פקודת ה-PowerShell Sort-Object, ואז משלב את חלק ממאפייני האובייקט באמצעות פקודת ה-PowerCLI Get-View.

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

Finding VMs based on various criteria

עם ה-VMs הרפליקנט ו-Scriptrunner מכובים בקבוצה, לא תוכל לראות את ערך ה-Running OS עבורם. המערכת הפועלת נאספת על ידי שירות VMware Tools. אם המידע אינו זמין, PowerCLI לא יכול לאחזר את מידע מערכת ההפעלה.

יצירת דוחות CSV עם PowerCLI

כלי VMware Tools הוא שירות באורח מיוחד ל-MVMs של Windows ו-Linux המספק מידע נוסף למנהל הסביבה ויכולות ניהוליות. ברוב המקרים הוא יספק סגירה נקיה, מידע על מערכת ההפעלה ותצוגת קונסול עם רזולוציה גבוהה יותר של ה-VMs.

A convenient way to report on and provide this information would be to pipe the above script into the Export-CSV  cmdlet. Export-Csv will create a CSV file with the same information you see in the console.

PS51> Get-VM | Sort-Object -Property Name | Get-View -Property @("Name", "Config.GuestFullName", "Guest.GuestFullName") |
Select -Property Name, @{N="Configured OS";E={$_.Config.GuestFullName}}, @{N="Running OS";E={$_.Guest.GuestFullName}} | Export-CSV C:\report.csv -NoTypeInformation 

לאחר הרצת הקוד לעיל, עליך להפתח את קובץ ה-CSV עם Excel כדי לסקור את הדוח.

CSV file of VM information

בדיקת דיסקים קשיחים וירטואליים עם PowerCLI

הפקודה Get-Harddisk היא עוד פקודה שימושית לדעת. פקודת Get-HardDisk מאפשרת לך לבדוק מידע אודות דיסקים קשיחים וירטואליים שמחוברים ל-VMs.

לדוגמה, כדי לשאול מידע אודות הדיסק הקשיח הוירטואלי שמחובר ל-VMs exchange1, ניתן להריץ את הפקודה הבאה:

PS51> Get-VM -Name exchange1 | Get-HardDisk | Format-List
Querying information about the virtual hard disk attached to the exchange1 VMs

חלק מהמידע הזה עשוי להיות רדונדנטי, כגון הקיבולת ב-KB לעומת GB. אך ישנה ערך בידע על ה-StorageFormat (סוגי הצמדה דקה/עבה). וידע על שם קובץ ה-VMDK.

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

בדיקת מתאמי רשת וירטואליים עם PowerCLI

בנוסף לבדיקת מידע של דיסקים קשיחים של המכונות הווירטואליות שלך, ייתכן כי תרצה גם לבדוק את מתאמי הרשת הווירטואליים. כדי לבדוק את התכונות הללו עבור מכונה וירטואלית יחידה, ניתן להשתמש ב־Get-NetworkAdpter cmdlet.

PS51> Get-NetworkAdapter -VM myVM

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

Get-NetworkAdapter

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

הרצת סקריפטים של PowerShell במכונות וירטואליות באמצעות Invoke-VMScript

באמצעות ה־Invoke-VMScript, תוכל גם להריץ קוד PowerShell ישירות בתוך המכונה הווירטואלית; אין צורך בחיבור לרשת. אם בעבר השתמשת ב־PowerShell Direct בסביבת Hyper-V, תחווה חוויית דומה עם זה.

במקום ליצור סשן של PowerShell Remoting או להשתמש ב־Invoke-Command cmdlet דרך הרשת, סשן כלילי, ה־Invoke-VMScript cmdlet יכול לשלוח פקודות ישירות למכונה הווירטואלית ללא חיבור WinRM או SSH רגיל.

כדוגמת זאת, אולי תרצה לבצע רשימת קבצים פשוטה במכונה הווירטואלית שנקראת exchange1. כדי לעשות זאת, עליך להעביר את dir C:\ כערך עבור הפרמטר ScriptText כפי שמוצג למטה.

PS51> Invoke-VMScript -VM exchange1 -ScriptText "dir C:\"

התוצאות הן כאילו הפעלת את הפקודות ישירות ממסוף המכונה הווירטואלית עצמה. Invoke-VMScript מעביר את כל הפלט של הפקודה שנפעלה על הווירטואל מכונה.

Invoke-VMScript

אף על פי שזוהי דוגמה בסיסית, ניתן להסתובב ברמות שונות של קושי. פקודת ה-PowerCLI הזו מאפשרת לך לציין batch, PowerShell, או Bash בתוך הפרמטר ScriptText.

ניתן להתקדם עוד יותר. למטה ניתן לראות כיצד להשתמש ב־Invoke-VMScript כדי להפעיל קוד PowerShell באמצעות משתנה נפרד $script עבור הקלט של פרמטר ScriptText. זה מאפשר לנו ליצור קלט סקריפט מותאם אישית יותר למכונה הווירטואלית לעבד.

PS51> $script = 'Get-Disk'

$guestCredential = Get-Credential

Invoke-VMScript -ScriptText $script -VM VM -GuestCredential $guestCredential  -ScriptType Powershell

ערך הפרמטר ScriptText צריך להיות מחרוזת. לכן למשתנה $script יש צורך בגרשיים חיצוניים כדי שיהיה חיוני.

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

הסקריפט שלך בפעולה צריך להביא פלט דומה למטה.

Running a script on a VM with Invoke-VMScript

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

התקדמות עם Get-View

אולי ראית כמה מה- cmdlets הבסיסיים מחזירים מאפיין בשם ExtensionData. תוכל למצוא את המאפיין הזה על ידי שימוש ב- PowerCLI cmdlets לקבלת הפלט המסוים והפשוט של Get-VM בפקודת ה- PowerShell Get-Member. אם תתקשר מה זה, זה הזמן שלך לגלות.

השלב הבא בהרפתקה זו הוא הבנה של פקודת ה- Get-View. VMware PowerCLI משתמשת בשאילתות שונות כדי לספק למכונה הווירטואלית את הפלט הנאה ופשוט של Get-VM. אך יש הרבה מאחורי הקלעים שנגישים רק על ידי שימוש ב- Get-View.

יש סיכוי גבוה שתראה הרבה סקריפטים המשתמשים בפקודה זו. כדאי לך להשקיע זמן להתרגל לראות את פקודת ה- Get-View בפעולה. כדי להתמקד, השתמש ב- Get-View כדי לקבל מידע על מכונה וירטואלית מסוימת (exchange1 בדוגמה זו).

תוכל לראות שאפשרויות ה- Filter של פקודה זו דורשות שימוש ב- PowerShell hashtable ולא בערכי מחרוזת פרטניים. התרע כאשר בונה סקריפטים ייחודיים שלך!

PS51> Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}

תוצאת הפקודה למעלה היא המון מידע מוטמע ואפשרויות של שינוי נגד ה- VM או קבלת מאפייני אובייקט.

Get-View

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

PS51> $VM = Get-View -ViewType VirtualMachine -Filter @{"Name" = "myVMName"}
PS51> $VM.Guest
Using Get-View with the Filter Parameter

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

PS51> $VM.Guest.GuestFullName

ישנם הרבה אפשרויות ל- Get-View לכל סוגי עצמי VMware. תרגישו חופשי לחקור את כל האפשרויות הללו ולסקור את מאמר המידע מ-VMware שמעמיק בפקודת ה- cmdlet העוצמתית הזו!

קוד תפיסת קוד VMware – ללמוד מהלחיצות שלך

אם ברצונך להנות מ-PowerCLI אך מעדיף שלא לבנות קוד על ידי הקלדה, תפיסת קוד במרכז ה-VCenter כאן בשבילך. תפיסת הקוד היא כלי פיתוח חדש שפועל בדומה למרכז הניהול של מנהל ה- Active Directory. בואו נכסה תפיסת קוד בשיעור זה על PowerCLI.

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

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

Navigating to the Developer Center menu item in vSphere

פעם בלשון ה- מרכז המפתחים, הפעל את אפשרות ה- הפעלת קוד.

Enabling code capture

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

Code capture enabled indicator

כפתור ה- הרשום האדום יופיע ליד סעיף המשתמש שלך של vCenter כך שתוכל כעת להקליט בכל עת.

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

  1. לחצו על הכפתור הקלט כדי להתחיל בהקלטה. זה יגרום לכפתור הקלט האדום להתחיל להתפעל.
  2. לחצו עם העכבר הימני על המחשב ה-VMware שלכם וצרו מכונה וירטואלית חדשה. עברו דרך האשף התוצאתי וצרו מכונה וירטואלית חדשה עם כל הערכים המוגדרים כברירת מחדל.
  3. לאחר שהמכונה הווירטואלית נוצרה, לחצו על כפתור ההקלטה ועצרו את ההקלטה שלכם.

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

למטה נמצא חלק מהפלט של CreateVM_Task של תהליך אשף VM חדש ב-GUI דרך תפיסת קוד:

Developer Center generated code

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

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

סיכום המדריך של PowerCLI

במאמר זה, כיסית הרבה נושאים. עבודה נהדרת! אני מקווה שהבנת את העוצמה ש-PowerCLI מביא לניהול של תשתיות VMware.

ישנם הרבה cmdlets ב-PowerCLI למגוון רחב של מוצרים, אך במאמר זה כ-covernו רק חלק מהם. היה בטוח להמשיך לעקוב אחרי הבלוג הזה למאמרים נוספים על הכלי המדהים הזה!

קריאה נוספת

Source:
https://adamtheautomator.com/powercli-tutorial/