Get-WmiObject: שאילתת WMI למידע על המחשב

בכל פעם שאנו צריכים לגלות מידע כלשהו אודות מחשב Windows ורכיביו, אנו יכולים לעשות זאת באמצעות Get-WmiObject.

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

גילוי כיתות עם Get-WmiObject

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

קיימות אלפי כיתות, וכנראה שאינכם יודעים איזו כיתה תרצו להשתמש בה עדיין. באמצעות Get-WmiObject, אנו יכולים לשאול את כל הכיתות הזמינות במרחב שמור. באמצעות Get-WmiObject -List, תוכלו לראות את כל הכיתות במרחב המקורי root\cimv2. אם תצטרכו לבדוק כיתות במרחב שמור אחר, תוכלו תמיד להשתמש בפרמטר Namespace יחד עם זה גם.

PS> Get-WmiObject -List

NameSpace: ROOT\cimv2

Name				Methods	Properties
CIM_Indication		{}		{CorrelatedIndications, IndicationFilterName, IndicationIde...
CIM_ClassIndication	{}    	{ClassDefinition, CorrelatedIndications, IndicationFilterNa........

קבלת מאפייני WMI

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

המחשב הרחוק שלי הוא בקר מתחום שנקרא DC. אני אבדוק את הכיתה Win32_OperatingSystem כדי לראות אילו מאפיינים קיימים שם.

PS> Get-WmiObject -ComputerName DC -Class Win32_OperatingSystem

SystemDirectory : C:\Windows\system32
Organization    :
BuildNumber     : 9600
RegisteredUser  : Windows User
SerialNumber    : 00252-00108-14656-AA864
Version         : 6.3.9600

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

Get-WmiObject -ComputerName DC -Class Win32_OperatingSystem | Select-Object -Property *

I can now see a property called Caption that lets me know the version of Windows.

PS> (Get-WmiObject -ComputerName DC -Class Win32_OperatingSystem | Select-Object -Property *).Caption Microsoft Windows Server 2012 R2 Standard

מציאת מאפייני WMI

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

בשימוש ב- CIM_DataFile כדוגמה, אולי אני רוצה רק למצוא הופעות שמייצגות קבצים דחוסים. מאחר שהמאפיין Compressed הוא מאפיין בכל ההופעות והוא ערך בוליאני, אני יכול להשתמש בפרמטר Filter כדי לשלוח את המסנן ישירות לספק WMI ולהחזיר רק הופעות שיש להן מאפיין Compressed עם ערך True.

Get-WmiObject -Class CIM_DataFile -Filter "Compressed = 'True'"

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

Get-WmiObject -Query "SELECT * FROM CIM_DataFile WHERE Compressed = 'True'"

קריאה לשיטות WMI

Get-WmiObject לא רק יכול לקרוא מידע מ-WMI, אלא גם לסייע בקריאה לשיטות WMI. אחת מהשיטות הנפוצות של WMI שמקוראת היא השיטה Create על מחלקת Win32_Process. ישנן מספר דרכים שונות לקרוא לשיטות WMI כגון באמצעות Invoke-WmiMethod, אך זה ניתן לעשות גם עם Get-WmiObject. עלינו רק ללכוד אינסטנס WMI ולקרוא לשיטה על אותו אובייקט.

הנה דוגמה להתחלת notepad.exe מרחוק על מחשב מרוחק. כבונוס, אנו משתמשים בהרשאה אלטרנטיבית כדי לעשות זאת!

$cred = get-credential
$process = Get-WmiObject -Query "SELECT * FROM Meta_Class WHERE __Class = 'Win32_Process'" -namespace "root\cimv2" -computername 'FOO' -credential $cred $process.Create( "notepad.exe" )

WMI, DCOM, וכן PowerShell Remoting

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

Get-WmiObject משתמש ב-DCOM כדי לתקשר עם מחשבים מרוחקים וכמעט תמיד זמין גם כך. אחרת, תצטרך לאפשר PowerShell Remoting על קצוות המחשב המרוחקים כאשר רוצה להשתמש ב-Get-CimInstance דרך WSMAN.

לפירוט מלא, ראה את תיעוד ה-Microsoft.

Source:
https://adamtheautomator.com/get-wmiobject/