Microsoft PowerShell – Querying with WMI and CIM – Bölüm 1. Windows Management Instrumentation (WMI) ve Common Information Model (CIM) birbirlerine bağımlı olan teknolojilerdir. Her ikisi de endüstri standartıdır. Bu sebeple farklı platform ve üretici ortamlarında da desteklenmektedir.
Micorosft’un WMI’ı WBEM standardının entegrasyonudur. (Daha öncelerde bu preliminart standardı tabanlıydı)
CIM yeni bir teknolojidir ve açık, cross platform temellidir.
WMI Windows mimarisinde NT 4.0’dan beri var olmaktadır.
Her iki teknoloji de WMI Repository‘e bağlanmak için kullanılır. Bu Repository yönetim bilgilerini içerir. Bu bilgilere sorgu yapılarak elde edilen Data’lar istenilen şekle göre manipüle edilebilir.
Windows PowerShell 3.0 ve sonrası her iki teknolojiyi de desteklemektedir. Daha önceki PowerShell versiyonları sadece WMI’ı desteklemektedir.
PowerShell 5.0 üzerinde anlatım yaptığım için bu iki paralel komut setinden de bahsetmiş olacağım.
CIM Komutları
CIM temelde üç tip bağlantı destekler;
- DCOM kullanarak Local bilgisayara bağlanma
- Web Services for Management (WSMAN) protokolünü kullanıp uzak bilgisayara ad hoc bağlantı kurma
- DCOM yada WS-MAN kullanarak uzak bilgisayara Session-based bağlantı kurma
DCOM bağlantıları genel olarak Windows işletim sisteminin bir parçası olan WMI servislerine yapılır.
WS-MAN bağlantıları ise Windows Remote Management (WinRM) servisine yapılır. Bu Windows PowerShell Remoting’in kullandığı servistir.
WinRm Windows Management Framework‘ün bir parçasıdır ve Windows Framework 2.0 ve yeni versiyonlarında bulunur.
WinRM’in varsayılanda yüklü olarak geldiği işletim sistemleri Windows 7, Windows 8, Windows 8.1, Windows 10, Windows Server 2008 R2, Windows Server 2012, Windows Server 2012 R2 ve Windows Server 2016‘dir. Bu işletim sistemleri içerisinde WinRM sadece Windows 8, Windows 8.1, Windows 10, Windows Server 2012, Windows Server 2012 R2 ve Windows Server 2016 içerisinde varsayılan olarak etkinleştirilmiştir.
CIM komutları iki şekilde kullanılır.
- WinRM kurulmuş ve etkinleştirilmiş olması gerekir. Bunun için Windows Management Framework 3.0 kurulu ve PowerShell Remoting entkinleştirilmiş olması gerekir.
- İkinci seçenek ise CIM komutlarının eski versiyonlardaki gibi WMI teknolojisini kullanmasıdır. WMI komutlarının kullanılmasıyla aynı teknoloji olduğu için uzak bilgisayar üzerinde Windows Management Framework kurulu olmasına gerek yoktur.
WMI Komutları
WMI komutları CIM komutları ile aynı Repository’i kullanır. Tek farklı olan şey WMI komutlarının uzak bilgisayara nasıl bağlandığıdır.
WMI komutları Session-based bağlantıyı desteklemez. Sadece DCOM üzerinden ad hoc bağlantı desteklenir.
DCOM RPC protokolünü kullanır ve network üzerinde bu protokol’e bağlı olarak gerekli izinlerin verilmesi gerekir.
WMI komutları WMI servisi ile iletişim kurar. (Uzak bilgisayar üzerinde Windows Management Framework bulunmasına ya da PowerShell Remoting’in etkin olmasına gerek yoktur)
Uzak bilgisayar üzerinde Windows firawall etkin durumda ise Remote Administration Exeption policy etkinleştirilmelidir. Farklı bir firewall çözümü var ise gerekli Exception konfigürasyonunun yapılması gerekir.
Not: WMI komutları genel olarak üzerinde PowerShell Remoting etkin olmayan uzak makinelere ad hoc bağlantı kurulacağı zaman gereklidir.
CIM vs WMI
Çoğu zaman WMI yerine CIM’in kullanılması önerilir. (DCOM, WSMAN ve Session-based bağlantı kurma desteği sebebiyle)
WMI ise uzak bilgisayar Windows Management Framework 2.0’a ya da daha yeni bir versiyona sahip değilse ya da sahip fakat PowerShell Remoting ekin değilse kullanılabilir. (Ancak CIM komutları da yine aynı işi CIM Session komutları ile yapabilir. Yani CIM kullanmak herşeyi cover edebilir durumda J )
Aslında bu karşılaştırmadan ve okuduğum kaynaklardan da anlaşılacağı gibi WMI komutlarının ileriye dönük pek bir geleceği görünmüyor. Geliştirme yönünde de açıklanan bir bilgi yok. Bu sebeplerden Microsoft genel olarak CIM komutlarını kullanmayı ve WMI komutlarını CIM pratik bir çözüm sağlamadığı durumlarda kullanmayı öneriyor.
Repository
Repository NameSpace‘ler içerisinde organize edilir. CIM ve WMI tarafından kullanılır. NameSpace basit olarak organizasyonel amaçlı olarak birbirleri ile ilişkili objeleri gruplayan bir klasör gibi düşünülebilir.
Name Space’ler Class‘ları barındırırlar. Class yönetilebilir yazılım ya da donanım bileşenini ifade eder. Makineler üzerlerinde barınan işletim sistemine ya da spesifik yazılımlara bağlı olarak aynı yada farklı NameSpace’ler yada Class’lar içerebilirler.
Repository ile uğraşırken NameSpace’ler içerisinde barındırılan Class’lara ait Instance‘lar ile uğraşılır. Örneğin makine üzerinde çift işlemci var ise işlemci Class’ına ait iki adet Instance var demektir. Var olan bir Class’a ait herhangi bir Instance olmayadabilir.
Instance’lar PowerShell mimarisinde daha önceden bahsettiğim objeler olarak düşünülebilir. Instance’lar da Property ve metod’lara sahiptir. Property’ler Instance’lara ait Attribute’ları tanımlarken, metodlar Instance’lara bir şey yapmasını söylerler. (Örneğin işletim sistemi Instance’ı restartcomputer metoduna sahiptir.)
Repository içerisinde bulunan Class’ları ve bunlara ait Property’leri bulmak çok kolay değildir J Sağlam Internet Search’leri gerektirebilir. Bazı dokümanlar bulunabilir ancak onlar da tamamını karşılayabilecek durumda değildir.
Repository içerisinde bulunan root\CIMv2 Class’ı MSDN’de iyi şekilde dokümante edilmiştir.
WMI ve CIM PowerShell’in bir parçası değildir. PowerShell sadece bu teknolojileri kullanır. Bu sebeple PowerShell’in help’inde Repository Class’larına ilişkin bir bilgi bulunmaz.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
TAGs : Microsoft PowerShell – Querying with WMI and CIM, wmi nedir, CIM nedir, cim kullanimi, cim nasil yapılır, cim acilimi, cim anlami, wmi ve cim karsilastirmasi, cim wmi, Powershell cim wmi