VBS ile oluşturulan WMI query iceren scriptler veya visual basic ile yaptığınız uygulamalar ile bir nevi windows işletim sistemini programlamış olursunuz.
VBS ile hazırlanan WMI (Windows Management Instrumentation) Query iceren scriptler en cok kucuk veya buyuk network ağlarını yonetmekle gorevli sistem yoneticilerinin işlerine yarayacaktır. Cunku bu scriptler ile Active Directory'e bir user eklemekten networkunuzde bulunan bir clientı pinglemeye kadar bir cok script yazabilirsiniz. Yazacağınız akıllı scriptler ile operasyonel yukunuzu mumkun oldukca azaltmış olacaksınız. Bu visual basic scriptleri yazabilmek icin bilgisayarınızda her hangi bir editore ihtiyacınız yoktur. Windowsun note defterini kullanabilirsiniz. Yalnız tavsiyem Microsoftun web sayfasında bulabileceğiniz WMI Tool’ u bilgisayarınıza indirip setup etmenizdir. Cunku bu tool ile WMI’ da bulunan butun classları goruntuleyebilirsiniz. Classların icerisinde yeni fieldlar oluşturabilir veya read only olmayan classların iceriğinde değişiklikler yapabilrisiniz. Bu tool ile bahsettiğim işlemlerin nasıl yapıldığından bahsetmiyecem. Sonucta basit bir tool ve biraz karıştırırsanız kendiniz oğreneceksinizdir. Ayrıca WMI database’nin bulunduğu folder’a giderek burdanda bazı toolları kullanabilirsiniz. Ayrıca bu folder WMI database dosyalarını barındırmaktadır. “C:\WINDOWS\system32\wbem” folder’ı altında WMI ile ilgili bazı toolları, “C:\WINDOWS\system32\wbem\Repository\FS” folderı altında ise WMI database dosyalarını bulabilirsiniz. Orneğin wbemtest.exe dosyası. Bu dosyayı calıştırdığınızda aşağıda gorduğunuz tool calışacaktır. Bu tool ile class yaratma, silme, acma ve query yapma gibi işlemler yapabiliyorsunuz.

Scriptlerin dışında tabiki Visual Basic 6.0 ile bir uygulama da yazabilirsiniz. Orneğin kendi sisteminizle ilgili ihtiyac duyduğunuz bir Network Yonetim ve İzleme programı gibi. Ben scriptler uzerinden gidicem ama dediğim gibi, bu scriptlerde kullanılan WMI queryler ne ise Visual Basic 6.0’ da da o dur. (duşuk cumle ) Şimdiiiii

Orneğin bir clientın pinglenmesi işlemini yapan bir script uzerinden anlatıma devam ediyorum. Bu scripti notepad’e yazıp vbs uzantılı olarak kaydetmeniz gerekir. Tabiki script editorlerini de kullanabilirsiniz.

1.strComputer = "."
Set fso = CreateObject("Scripting.FileSystemObject")
Set LogFile = fso.CreateTextFile("c:\Ping\Logs\Client.log",true)
2.Set objWMIService = GetObject("winmgmts:!\\" & 3.strComputer & "\root\cimv2")

4.Set Client = objWMIService.ExecQuery("Select * from Win32_PingStatus Where Address 5.= '192.168.1.25'")

6.LogFile.WriteLine "Log file created in " & Now

7.For Each objComputer In Client
8. If objComputer.StatusCode = 0 Then
9. LogFile.WriteLine "__________________CLIENT_____________________ "
10. LogFile.WriteLine "Client sorunsuz bir şekilde pinglendi."
11. LogFile.WriteLine "IP Address : " & objcomputer.address
12. LogFile.WriteLine "Send Packet Size : " & objcomputer.ReplySize & " bytes"
13. LogFile.WriteLine "Response Time : " & objcomputer.ResponseTime & " ms"
14.Next

Bu scriptte gorduğunuz gibi ilk once 2.ve 3. satırlarda WMI databaseine bağlanıyoruz. Bağlandıktan sonra Classlar icerisinde istediğimiz bilgiyi getirecek class uzerinde bir sorgu yapıyoruz ki bu sorgu dili WQL olarak adlandırılmıştır. WQL ile SQL arasındaki tek fark; WQL ile classlar uzerinde sorgu calıştırırsınız, SQL ile ise de bildiğiniz gibi database ler icindeki table’larda sorgu calıştırırsınız. Bunun dışında aralarında bir kullanım farkı yoktur. Yani komutlar falan aynıdır. 4. ve 5. satırlarda; windows clientların pinglenme esnasındaki bilgileri Win32_PingStatus classına yazmaktadır. İşte bizde bir query ile bu bilgiyi alıyoruz ve bu aldığımız bilgiyi bir text dosyasına yazıyoruz. Bu bilgileri log dosyasına yazarken classlar icerisindeki instance ları kullanıyoruz. Orneğin objcomputer.ResponseTime gibi. Ben burda 3 adet (address, ReplySize ve ResponseTime) instance kullandım. Siz isterseniz pinglenme esnasında oluşan diğer kayıtları da kullanabilirsiniz. 1. satır scriptimizde WMI’ın calıştığı bilgisayarı tanımlamaktadır. strComputer=”.” ile kendi bilgisayarımızın WMI’ına bağlanmış oluruz. Eğer networkte bulunan diğer clientlardan birisinin WMI’ına bağlanmak istersek strComputer = “ComputerName” olarak bu satırı değiştirmemiz gerekirdi. Tabi bir clientın WMI’ına bağlanabilmek icin bir takım network koşullarının sağlanması gerekir. Orneğin domain admin iseniz veya bağlanmak istediğiniz clientta local admin iseniz bağlanma işlemi sorunsuz gercekleşecektir. Bu arada remote service lerinide run etmeniz gerekecektir. Eğer siz networkten bağımsız calışan scriptler veya programlar geliştirecekseniz, yani localinizdeki WMI ile uğraşacaksanız bu netwrok koşullarını yerine getirmek zorunda değilsiniz. Bu ornekte localda calıştırılabilecek bir scriptti.

Şimdi de networkteki bir clientın Add/Remove Programs bilgilerini getiren bir script yazalım. Bakalım clientımızda bizden habersiz hangi programlar yuklenmiş 

Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3
strComputer = "tekbilg1"
'WMI class connection
Set objWMIService = GetObject("winmgmts:"_
& "!\\" & strComputer & "\root\cimv2")
Set objAddRemovePrograms = objWMIService.ExecQuery _
("Select * from Win32Reg_AddRemovePrograms")
'Database connection
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordset = CreateObject("ADODB.Recordset")
objConnection.Open "DSN=WMI_Database;"
objRecordset.Cursor******** = adUseClient
objRecordset.Open "SELECT * FROM AddRemovePrograms", objConnection, adOpenStatic, adLockOptimistic
For Each counter In objAddRemovePrograms
objRecordset.AddNew
objRecordset("ProdID") = counter.ProdID
objRecordset("DisplayName") = counter.DisplayName
objRecordset("InstallDate") = counter.InstallDate
objRecordset("Publisher") = counter.Publisher
objRecordset("Version") = counter.Version
objRecordset.Update
Next
objRecordset.Close
objConnection.Close
MsgBox("Add Remove bilgileri alındı.")

Bu script ile network icerisindeki tekbilg1 adlı bilgisayarın WMI databasine bağlanıyoruz. Buırdan Win32Reg_AddRemovePrograms classında bir WQL calıştırıp, istediğimiz bilgileri iceren instanceları alıyoruz. Aldığımız bu bilgileri ODBC’ de tanımlanmış bir Access database’ine yazıyoruz.

Gorduğunuz gibi eğer Visual Basic ile haşır neşir birisi iseniz WMI programlama oldukca kolay bir işlemdir. Yazımın başında size bahsettiğim WMI_Tool’u bilgisayarınıza kurar ve bu tool ile WMI classlarını incelerseniz daha neler yapabileceğinizi kestirmiş olursunuz. Neler yapabileceğinizden biraz bahsedicek olursam; Networkunuzdeki clientların donanım ve yazılım bilgilerini kendi localinize alınması, Computer Managament işlemleri, Disk ve File system işlemleri (Disk kotalarının belirlenmesi, disk kapasitesi ve space durumlarının monitor edilmesi vb.), Files and folders işlemleri, (dosya kopyalama, yaratma, silme, ozelliklerini değiştirme, dizin yaratma, kopyalama, taşıma, silme vb..) Monitoring (Windowsun loglarını izlemek, eventlog, security logs),Logs işlemleri, Networking (Static IP, DHCP işlemleri, pinglemeler, vb..)Printing işlemleri, Process, Registry işlemleri, Security işlemleri, Services (Belirtilen servicelerin remote’tan start – stop edilmesi gibi, vb..), Active Directory Users and Groups işlemleri vs...)

Benden bu kadar. Zaten daha fazla ornek vermenin de bir anlamı yok. Mantığı anladıysanız artık WMI size ait. Herkeze iyi calışmalar.
__________________