تعد تقنية WMI (Windows Management Instrumentation) أداة لإدارة النظام ضمن Windows والتي توفرها Microsoft. من خلال هذه الأداة، يمكن إدارة جميع المعلومات الموجودة في نظام العميل تقريبًا محليًا أو على نظام العميل. تم تطوير العديد من أدوات إدارة الشبكات الاحترافية استنادًا إلى WMI. هذه الأداة هي أداة قياسية ضمن نظامي التشغيل Win2000 وWinNT، وخيار تثبيت موسع ضمن نظام التشغيل Win9X. ستقدم هذه المقالة كيفية الوصول إلى برمجة كائنات WMI من خلال برمجة VB.
أولاً، دعونا نلقي نظرة على مثال بسيط للحصول على معلومات النظام من خلال WMI. هذا المثال يحصل على العمليات الجارية في النظام من خلال كائنات WMI:
FunctionEnum1()AsString
ديمويمي
SetWMI=GetObject(WinMgmts :)
Setobjs=WMI.InstancesOf(Win32_PRocess)
ForEachobjInobjs
Enum1=Enum1 obj.الوصف Chr(13) Chr(10)
التالي
وظيفة النهاية
في الكود أعلاه، يتم الحصول على كائن WMI أولاً من خلال GetObject(WinMgmts:). يوجد العديد من العناصر الفرعية ضمن كائن WMI. هنا نحصل على كافة العناصر الفرعية لقائمة العمليات في النظام من خلال WMI.InstancesOf(Win32_Process).
دعونا نلقي نظرة على مثال كامل للوصول إلى كائنات WMI. يحصل هذا المثال على معلومات الكمبيوتر.
قم بإنشاء مشروع جديد، وأضف عنصر تحكم TextBox وعنصر تحكم CommandButton إلى Form1، واكتب التعليمة البرمجية التالية في حدث Click لـ CommandButton:
PrivateSubCommand1_Click()
يخفت، النظام، البند
DimiAsInteger
SetSystem=GetObject(winmgmts:).InstancesOf(Win32_ComputerSystem)
ForEachitemInSystem
'List1.AddItemitem.cputype
s=معلومات الكمبيوتر&vbCrLf
s=s&******************************&vbCrLf
s=s&اسم الكمبيوتر:&item.name&vbCrLf
s=s&Status:&item.Status&vbCrLf
s=s&type:&item.SystemType&vbCrLf
s=s&Manufacturer:&item.Manufacturer&vbCrLf
s=s&model:&item.Model&vbCrLf
s=s&memory:~&item.totalPhysicalMemory/1024000&mb&vbCrLf
s=s&domain:&item.domain&vbCrLf
لا يمكن استخدام خيار 's=s&Workgroup&item.Workgroup&vbCrLf' للحصول على مجموعة العمل والمجال في نفس الوقت
s=s¤t user:&item.username&vbCrLf
s=s&bootstate&item.BootupState&vbCrLf
s=s&هذا الكمبيوتر ينتمي إلى&item.PrimaryOwnerName&vbCrLf
s=s&system type&item.CreationClassName&vbCrLf
s=s&نوع الكمبيوتر&item.Description&vbCrLf
Fori=0To1'هنا من المفترض أنه تم تثبيت نظامين
s=s&Chr(5)&خيارات بدء التشغيل&i&:&item.SystemStartupOptions(i)_
&vbCrLf
نيكستي
التالي
Text1.Text=s
EndSub
قم بتشغيل البرنامج، وانقر فوق Command1، وسيتم عرض معلومات الكمبيوتر في مربع النص.
في التعليمات البرمجية أعلاه، يحصل البرنامج على كائن WMI من خلال GetObject(winmgmts:)، ثم يحصل على المفتاح الفرعي Win32_ComputerSystem التالي ويحصل على المعلومات الموجودة في النظام عن طريق الوصول إلى العناصر الفرعية في كائن Win32_ComputerSystem.
تجدر الإشارة إلى أنه ليس كل الأنظمة تدعم WMI، وفي بعض الأنظمة لا يمكن عرض معلومات مثل الشركة المصنعة.
أجهزة الكمبيوتر والشبكات اليوم معقدة للغاية. على سبيل المثال، فيما يتعلق بأجهزة النظام، هناك اللوحات الأم، والأقراص الصلبة، وبطاقات الشبكة...
من حيث البرمجيات، هناك أنظمة التشغيل، والبرامج المثبتة في النظام، والعمليات الجارية، وما إلى ذلك. تتضمن جوانب الشبكة المجالات ومجموعات العمل وما إلى ذلك. يمكنك استخدام WMI للوصول إلى كافة المعلومات المذكورة أعلاه، ولكن سيكون من الصعب جدًا الوصول إليها باستخدام نفس العناصر المذكورة أعلاه. ولتحقيق هذه الغاية، يوفر WMI عبارة استعلام مشابهة لعبارة SQL، والتي يمكن من خلالها الحصول على العناصر الفرعية الموجودة ضمن كائن WMI.
فيما يلي رمز يتم تنفيذه عبر بطاقات الشبكة المثبتة في النظام ويعيد عنوان MAC الخاص ببطاقة الشبكة:
PrivateFunctionMACAddress()AsString
Setobjs=GetObject(winmgmts:).ExecQuery(_
SELECTMACaddress&_
FROMWin32_NetworkAdapter&_
أين&_
((MACAddressIsNotNULL)&_
و(الشركة المصنعة<>&_
"مايكروسوفت")))
ForEachobjInobjs
MACAddress=obj.MACAddress
خروج من أجل
التاليobj
وظيفة النهاية
يحصل التعليمة البرمجية أعلاه على كائن WMI، ثم يقوم بتشغيل ExecQuery لتنفيذ عبارة استعلام WMI للحصول على بطاقة الشبكة المثبتة وإرجاع عنوان MAC الخاص ببطاقة الشبكة.
يدعم WMI أيضًا معالجة الأحداث، مما يسمح للبرامج بمعالجة أحداث النظام، مثل تشغيل البرنامج وإغلاقه، وإدراج وإزالة محركات الأقراص القابلة للإزالة، وما إلى ذلك. يوجد أدناه برنامج يمكنه مراقبة البرامج التي تعمل على النظام.
قم أولاً بإنشاء مشروع جديد، ثم انقر فوق عنصر مراجع المشروع في القائمة، وحدد MicrosoftWMIScriptingLibrary في قائمة المراجع، ثم قم بإضافة مكتبة كائنات WMI إلى المشروع. قم بإضافة عنصر تحكم ListBox إلى Form1، ثم قم بإضافة التعليمة البرمجية التالية إلى Form1:
خيار صريح
DimLocatorAsSWbemLocator
DimServicesAsSWbemServices
DimWithEventsStatusSinkAsSWbemSink
PrivateSubKillEvents()
الحالةSink.Cancel
SetStatusSink=لا شيء
EndSub
PrivateSubForm_Load()
DimQueryAsString
SetStatusSink=NewSWbemSink
SetLocator=CreateObject(WbemScripting.SWbemLocator)
SetServices=Locator.ConnectServer()
الاستعلام=SELECT*FROM__InstanceCreationEvent
الاستعلام=الاستعلام داخل1
استعلام=استعلام WHERETargetInstanceISA'Win32_Process'
Services.ExecNotificationQueryAsyncStatusSink,Query
EndSub
PrivateSubStatusSink_OnObjectReady(ByValStatusEventAsSWbemObject,_
بواسطةValEventContextAsSWbemNamedValueSet)
ديمار
DimstrQueAsString
DimiAsInteger
القائمة 1. واضح
arr=Split(StatusEvent.GetObjectText_,Chr(10))
فوري=LBound(arr)ToUBound(arr)
List1.AddImarr(i)
نيكستي
EndSub
PrivateSubStatusSink_OnCompleted(ByValHResultAsWbemErrorEnum,_
بواسطةValErrorObjectAsSWbemObject,_
بواسطةValEventContextAsSWbemNamedValueSet)
IfHResult<>wbemErrCallCancelledThen
'معالجة الأخطاء
EndIf
EndSub
في البرنامج أعلاه، يتم تعريف كائن SWbemSink StatusSink، ثم يتم إنشاء خادم كائن SWbemServices، ويتم توصيل StatusSink بكائن الخادم. بهذه الطريقة، يمكن مراقبة تشغيل البرنامج من خلال StatusSink.
قم بتشغيل البرنامج، ثم قم بتشغيل أي برنامج، ويمكن إدراج معلومات البرنامج قيد التشغيل في ListBox الخاص بـ Form1.
أقوى جانب في تطبيق WMI هو أنه يمكنه تحقيق الإدارة عن بعد من خلال صفحة الويب. بعد ذلك، لنقم بإنشاء صفحة HTML، والتي يمكنها مراقبة البرامج التي تعمل في النظام ديناميكيًا مثل برنامج VB أعلاه. كود HTML للبرنامج الذي يعمل في نظام المراقبة هو كما يلي:
<أتش تي أم أل>
<الرأس>
<objectID=mysinkCLASSID=CLSID:75718C9A-F029-11d1-A1AC-00C04FB6C223></كائن>
</الرأس>
<النص>
وظيفةwindow.onload()
{
varlocator=newActiveXObject(WbemScripting.SWbemLocator);
varservice=locator.ConnectServer();
szQuery=SELECT*FROM__InstanceCreationEvent;
szQuery =WITHIN1;
szQuery =WHERETargetInstanceISA'Win32_Process';
Service.ExecNotificationQueryAsync(mysink,szQuery);
}
</النص>
<scriptFOR=mysinkEVENT=OnObjectReady(obj,objAsyncContext)>
document.all.info.innerHTML =obj.TargetInstance.Name <br>;
</ نص >
<الجسم>
<spanID=معلومات></span>
</ الجسم>
</أتش تي أم أل>
احفظ ملف الصفحة بالكود كلاحقة Htm. انقر نقرًا مزدوجًا لفتح صفحة الويب، ثم قم بتشغيل البرنامج، ويمكن إدراج أسماء ملفات البرامج قيد التشغيل على صفحة الويب.
يقدم ما سبق باختصار تطبيق WMI. في الواقع، يعد تشغيل كائنات WMI معقدًا للغاية كما أن وظائفه قوية جدًا أيضًا. على سبيل المثال، يمكنك استخدام WMI لمراقبة أجهزة الكمبيوتر الموجودة على الشبكة المحلية بأكملها على الخادم وتثبيت البرامج فيها دفعات إلى أجهزة الكمبيوتر الموجودة على الشبكة المحلية (مثل برامج مكافحة الفيروسات). الدخول إلى السيرفر عن بعد من خلال الصفحة، التحكم بالسيرفر لتشغيل البرامج، إضافة مستخدمين، إلخ. لمزيد من تطبيقات WMI، يمكن للقراء زيارة الصفحة الرئيسية لتطوير WMI على MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmisdk/wmistart_5kth.asp
احصل على مزيد من المعلومات.
->