Windows Management Instrumentation Code Creator (Windows Yönetim Araçları Kod Üretici)

Eyl 06, 2013
WMI (Windows Management Instrumentation - Windows Yönetim Araçları), 1998 yılında Windows NT 4.0 Service Pack 4 eklentisi olarak piyasaya sürülmüş core (çekirdek) yönetim teknolojisidir. WMI, bünyesindeki yüzlerce sınıf sayesinde geliştirilen scriptlerle (betik), tüm Windows tabanlı işletim sistemlerinde etkili veri yönetimini sağlar. WMI teknolojisini kullanan uygulamalar; scripting languages (betikleme dilleri), C, C#, C++, VB gibi dillerle geliştirilirler. WMI betikleri sayesinde uzaktan bağlantı ile yönetimsel görevler otomatikleştirilir. Örneğin DNS (Domain Name System - Etki Alanı Ad Sunucusu), DHCP (Dynamic Host Configuration Protocol - Dinamik Makine Yapılandırma Protokolü) gibi ağ servisleri WMI tabanlı betiklerle yönetilir; bilgisayarda Win32_Process sınıfı ile bir process (işlem) başlatılır, event viewer (olay görüntüleyici) kayıtları sorgulanır; bilgisayar remote connection (uzaktan bağlantı) ile yeniden başlatılır.

WMI’dan önce, Windows iş istasyonlarını veya sunucuları yönetmek için event logs (olay görüntüleyiciler), işletim sistemi ayarları, registry settings (kayıt defteri ayarları) gibi daha birçok grafik yönetim aracı kullanırdı. Ancak bu araçların hepsi Win32 Application Programming Interfaces (Uygulama Programlama Arayüzü)'ne bağlıydı ve birçok betik dili Win32 uygulama arayüzlerini doğrudan çağıramadığından bu durum sistem yöneticileri için sorun teşkil ediyordu. Günümüzde ise WMI ile birlikte, Scripting Library (Betikleme Kütüphanesi) kullanılarak betikler yazılır ve böylelikle tüm yönetimsel görevlerin gerçekleştirilmesi sağlanır.
  1. WMI sınıflarının kullanılması için "winmgmt" servisi arka planda çalışır. Winmgmt servisini görüntülemek için Start (Başlat) ->  Run (Çalıştır)’a "services.msc" yazılır. Ekrana gelen pencereden "Windows Management Instrumentation" servisinin çalışıp  çalışmadığı görülür.




  2. Birçok servisin çalışması "wmimgmt" servisinin çalışmasına bağlıdır. WMI servisine çitf tıklanıp Dependencies (Bağımlılıklar) sekmesine gelindiğinde hangi servislerin WMI’a bağlı olarak çalıştığı görüntülenir.



WMI Kontrol Paneli

  1. WMI hizmetinin durumu ile ilgili detaylı bilgi almak için Start (Başlat) -> Run (Start) ‘a wmimgmt.msc yazarak WMI kontrol arayüzü görüntülenir. Burada sol taraftaki WMI Control (Local) nesnesine sağ tıklanıp Properties (Özellikler) seçilirse WMI servisi ile ilgili ayrıntılı bilgi alınır.



  2. Buradan Security (Güvenlik) sekmesi ile namespaces (isim uzayları) ayarları yapılır.

WMI Tester (Windows Management Instrument Tester - Windows Yönetim Araçları Sınayıcısı)
  1. WMI Tester (Windows Management Instrument Tester - Windows Yönetim Araçları Sınayıcısı), WMI sınıflarını ve metotlarını düzenlemek ve görüntülemek için kullanılan genel amaçlı bir araçtır. WMI Tester, WMI’a bağlı olarak çalışan programlarda sorun çözümü için de kullanılır. WMI Tester ile WMI sınıfları ve metotları yaratılıp düzenlenir, istenilen query (sorgu) yürütülür. WMI Tester’ı başlatmak için Start (Başlat) -> Run (Çalıştır)’a "wbemtest" yazılır. Gelen ekranda Connect (Bağlan) düğmesine tıklanır.



  2. Gelen ekranda root\cimv2 isim uzayı görüldükten sonra tekrar Connect (Bağlan)‘a tıklanır.



  3. Böylelikle WMI Tester, seçili isim uzayı için başlatılmış olur. Genel olarak WMI nesneleri  ”Win32_ “ ile başlar. Örnek bir sorgu çalıştırılmak istenirse ekrandaki Query (Sorgula) düğmesine tıklanır.



  4. Win32 servislerinin tamamını görülmek istendiğinde gelen ekrana select * from Win32_Service sorgusu yazdırılır.



  5. Apply (Uygula) düğmesine tıklandığında tüm Windows servisleri listelenmiş olur.



  6. Seçilen WMI nesnesinin özelliklerini belirlemek için sorgu sonucu gelen alternatiflerden biri seçilerek üzerine çift tıklanır ve gelen ekranda istenilen değişiklikler yapılır.

WMI Code Creator (WMI Kod Üretici) Nedir?

WMI Code Creator (WMI Kod Üretici), WMI ile ilgili yönetimsel işlemler yapılmasını sağlayan C#, VB .NET ve VBScript kodları üreten faydalı bir yazılımdır. Araç çalıştırıldığında üst menüdeki Code Language (Kod Dili) sekmesi ile programın istenilen dilde betik üretmesi sağlanır.



Ayrıca WMI Code Creator 1.0 ile betiğin çalıştırılacağı bilgisayar veya bilgisayar kümesi seçilir. Üst menüdeki Target Computer (Hedef Bilgisayar) seçeneği ile yerel bilgisayarda veya uzak bir bilgisayarda sorgu yapılır.

 

WMI Code Creator ile sınıf sorguları yapılır ve istenen öntanımlı metotlar çalıştırılır. Bu yazılım özellikle bilgi teknolojileri alanındaki uzmanlara, uygulama geliştiricilere ve sistem yöneticilerine betik yazmakta çok büyük kolaylıklar sağlar. WMI Code Creator 1.0 yazılımı ile C# dilinde örnek bir konsol uygulaması üretilmiştir. Kod, Win32_System sınıfını kullanarak çalıştırıldığı makine ile ilgili sistemsel bazı özellikleri döndürmektedir. Uygulamanın kodları aşağıdaki gibidir: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;
using System.Windows.Forms;

namespace WMISample
{
    public class MyWMIQuery
    {
        public static void Main()
        {
            try
            {
                ManagementObjectSearcher searcher =
                    new ManagementObjectSearcher("root\\CIMV2",
                    "SELECT * FROM Win32_ComputerSystem");

                foreach (ManagementObject queryObj in searcher.Get())
                { 
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("Win32_ComputerSystem instance");
                    Console.WriteLine("-----------------------------------");
                    Console.WriteLine("NumberOfProcessors: {0}", queryObj
                    ["NumberOfProcessors"]);
                    Console.WriteLine("NumberOfLogicalProcessors: {0}",
                    queryObj["NumberOfLogicalProcessors"]);
                    Console.WriteLine("Model: {0}", queryObj["Model"]);
                    Console.WriteLine("Manufacturer: {0}", queryObj
                    ["Manufacturer"]);
                    Console.WriteLine("Name: {0}", queryObj["Name"]);
                    Console.WriteLine("Domain: {0}", queryObj["Domain"]);
                    Console.WriteLine("SystemType: {0}", queryObj
                    ["SystemType"]);
                    Console.WriteLine("TotalPhysicalMemory: {0}", queryObj
                    ["TotalPhysicalMemory"]);
                    Console.ReadLine();
                    Console.ReadLine(); 
                } 
            }
            catch (ManagementException e)
            {
               MessageBox.Show("An error occurred while querying for
               WMI data: " + e.Message);
            }
        }
    }
}

Örnek program şu şekilde bir sonuç döndürmektedir: