احصل على كائن Wmi: استعلم عن معلومات الكمبيوتر

كلما احتجنا إلى اكتشاف أي معلومات حول جهاز كمبيوتر يعمل بنظام Windows ومكوناته، يمكننا القيام بذلك باستخدام Get-WmiObject.

بالإضافة إلى القراءة، يمكن لـ Get-WmiObject أيضًا تشغيل إجراءات على الأنظمة المحلية أو عن بُعد باستخدام أساليب WMI. هذه الأمر هي واحدة من عدة أوامر في PowerShell التي يمكن أن تعمل مع مستودع 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، وباورشيل ريموتينغ

آخر شيء يجب أن نشير إليه هو خليفة هذا الأمر: Get-CimInstance. على الرغم من أن Get-CimInstance يوفر بعض المزايا في استخدام باورشيل ريموتينغ كبروتوكول اتصال بعيد الافتراضي، إلا أن Get-WmiObject في بعض الأحيان أسهل في الاستخدام.

Get-WmiObject يستخدم DCOM للتواصل مع الكمبيوترات عن بُعد وعادة ما يكون متاحًا أيضًا. خلاف ذلك، ستحتاج إلى تمكين باورشيل ريموتينغ على نقاط النهاية البعيدة عند الرغبة في استخدام Get-CimInstance عبر WSMAN.

للحصول على تفصيل كامل، تحقق من وثائق مايكروسوفت.

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