Managed WMI Sınıfları Oluşturma

     C# ile WMI kodu yazıyorsanız ManagementScope, ManagementObjectSearcher, ManagementObjectCollection ve tabiki ManagementObject sınıflarına sık sık başvurmuşsunuzdur; ama bu sınıflarla çalışmak her zaman kolay değildir, özellikle de fonksiyonlarını kullanıyorsanız. Aşağıdaki koda göz atın :

private void List(string alanAdi) {
  string sorgu = String.Format("SELECT * FROM MicrosoftDNS_AType WHERE ContainerName = '{0}'", alanAdi);
  ManagementScope managementScope = new ManagementScope(new ManagementPath(@"\\.\root\MicrosoftDNS"));
  managementScope.Connect();

  ManagementObjectSearcher objectSearcher = new ManagementObjectSearcher(managementScope, new ObjectQuery(sQuery));
  ManagementObjectCollection objectCollection = objectSearcher.Get();

  foreach (ManagementObject managementObject in objectCollection) {
   //gelen nesne ile ilgili iş mantığı
  }
}

       Şimdi size iyi bir haberim var; .Net framework araçları arasında bulunan “Management Strongly Typed Class Generator” (Mgmtclassgen.exe) işlerinizi oldukça kolaylaştıracaktır. “<Program Files>\Microsoft Visual Studio 8\SDK\v2.0\Bin\” dizini altında bulabileceğiniz “mgmtclassgen.exe” uygulaması, parametrelerinde vereceğiniz WMI sınıfı üzerinde rahatlıkla işlem yapabileceğiniz managed kodları üretecektir.

    Bu uygulamayı en basit aşağıdaki şekilde çalıştırabilirsiniz :

mgmtclassgen.exe Win32_Service

    Bu komut size Win32_Service WMI sınıfı üzerinde çalışabilmek için ara bir managed sınıf üretecektir. İşte size daha detaylı bir başka örnek

mgmtclassgen Win32_Service /n root\cimv2 /l CS /p c:\servisler.cs

    Bu örnekte Root\cimv2 isim uzayı altında bulunan Win32_Service sınıfı üzerinde işlem yapabileceğiniz sınıfı oluşturu ve çıktıyı “c:\servisler.cs” dosyasına yazar. Oluşturduğu sınıfın bulunacağı isim uzayı ise ROOT.CIMV2.Win32 olacaktır. Kullanabileceğiniz diğer parametreler ise :

/LOluşturulacak olan kodun hangi dotnet dilinde olacağı. CS, VB, JS, VJ, MC seçeneklerinizden varsayılan olan CSharp (CS)’tir.
/MBağlanılacak olan makine adı, varsayılan değeriyerel makinedir.
/UKullanıcı Adı
/PWKullanıcı Şifresi

   mgmtclassgen uygulamasını yukarıda verdiğim örnek içerisindeki AType WMI sınıfı için kullanılacak olursak; aynı işi , oluşturulan managed kodu ile, aşağıdaki kadar basit şekilde yapabilirsiniz :

private void List(string alanAdi) {
  foreach (AType atype in AType.GetInstances(String.Format("SELECT * FROM MicrosoftDNS_AType WHERE ContainerName = '{0}'", alanAdi))) {
    //İş mantığı kodu buraya yazılacak
  }
}

Leave a Comment

en_USEnglish