24 Nisan 2018 Salı

Windows Management Instrumentation

Giriş
Windows Management Instrumentation (WMI) teknolojisi ile işletim sistemindeki bir çok bilgiye erişmek mümkün.

PowerShell ile Kullanımı
get-wmiobject ile wmi nesnelerine erişilebilir.
>get-wmiobject Win32_LogicalDisk

C# ile Kullanımı
wmi C# ile de kullanılabiliyor.

Nesneler
Sanırım bir sürü nesne çeşidi var. Şimdiye kadar karşıma çıkanlar şunlar.
  • Win32_DiskDrive
  • Win32_LogicalDisk
  • Win32_MappedLogicalDisk
  • Win32_NetworkAdapterConfiguration
  • Win32_SerialPort
  • Win32_PhysicalMedia
ManagementScope sınıfı
Constructor
Şöyle yaparız.
ManagementScope scope = new ManagementScope();
Başka bir bilgisayara erişmek için şöyle yaparız.
var options = new ConnectionOptions();
options.Authentication = AuthenticationLevel.Default;
options.Impersonation = ImpersonationLevel.Impersonate;
options.EnablePrivileges = true;

scope = new ManagementScope(@"\\" + machine + "\\root\\CIMV2", options);
Connect metoduŞöyle yaparız.
scope.Connect();
ManagementObjectSearcher sınıfı
Şu satırı dahil ederiz.
using System.Management;
Bu sınıf ile SQL gibi sorgu yapabiliyoruz. Açıklaması şöyle.
When using ManagementObjectSearcher - one can search for specific properties (instead of all by *).

Constructor - ManagementScope + ObjectQuery
Şöyle yaparız.
var managementScope = new ManagementScope();

//get disk drives
var query = new ObjectQuery("select * from Win32_DiskDrive");
var searcher = new ManagementObjectSearcher(managementScope, query);
Constructor - string olarak ManagementScope + ObjectQuery
Scope ile sorgu şöyle yapılır
ManagementObjectSearcher searcher =
            new ManagementObjectSearcher("root\\WMI",
            "SELECT * FROM MSAcpi_ThermalZoneTemperature");

foreach (ManagementObject queryObj in searcher.Get())
{
  Console.WriteLine("CurrentTemperature: {0}", (queryObj["CurrentTemperature"]));
  Console.WriteLine(queryObj);
}
Constructor - ManagementScope + SelectQuery
Şöyle yaparız
ManagementScope scope = new ManagementScope(...);
...
scope.Connect();
SelectQuery query = new SelectQuery("Select * FROM
 Win32_NetworkAdapterConfiguration");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(scope, query);

Constructor - WqlObject sorgu
Şöyle yapılır.
WqlObjectQuery q = new WqlObjectQuery("SELECT * FROM Win32_IDEController");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(q);
Constructor - string sorgu
Sadece sorgu şöyle yapılır
searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

int i = 0;
foreach(ManagementObject wmi_HD in searcher.Get())
{
  // get the hardware serial no.
  wmi_HD["SerialNumber"]
  
}
Get metodu
Şöyle yaparız.
ManagementObjectSearcher mSearch
 = new ManagementObjectSearcher("Select * from Win32_SerialPort");
ManagementObjectCollection mReturn = mSearch.Get();
Eğer aldığımız nesnenin tüm alanlarını görmek istersek şöyle yaparız.
var oReturnCollection = searcher.Get();

//List all properties available
var colList = oReturnCollection.Cast<ManagementObject>().First();
foreach (var property in colList.Properties)
{
  Console.WriteLine("Property: {0} = {1}", property.Name, property.Value);
}
ManagementObjectCollection Sınıfı
Şu satırı dahil ederiz.
using System.Management;
Bu sınıf sadece döngü içinde kullanılır. Şöyle yaparız.
ManagementObjectSearcher mSearch;
= new ManagementObjectSearcher("Select * from ...");
ManagementObjectCollection mReturn = mSearch.Get();

foreach (ManagementObject mObj in mReturn)
{
  ...
}

Hiç yorum yok:

Yorum Gönder