Mengenal Windows Management Instrumentation (WMI)
Tutorial Information
Program | Microsoft Visual FoxPro |
Version | 9.0 |
Difficulty | Menengah - Mahir |
Estimated Time | 45 Menit |
Windows Management Instrumentation (WMI)
Windows Management Instrumentation (WMI) merupakan teknologi yang dikembangkan oleh Microsoft yang memungkinkan kita untuk melakukan tugas-tugas management Windows melalui scripting (programatikal) mulai dari proses query untuk mendapatkan data atau informasi pada sistem komputer (lokal maupun remote) sampai dengan otomatisasi proses pada sistem.Microsoft menyertakan WMI pada versi Windows Me, Windows 2000, Windows XP, Windows 2003, Windows Vista, Windows 7, dan Windows 8. Untuk Windows 98 dan Windows NT 4.0 tersedia instalasi WMI yang dapat didownload melalui situs Microsoft.
Berikut beberapa hal yang dapat dilakukan dengan menggunakan WMI :
- Melakukan query ke sistem operasi untuk mendapatkan informasi tentang sistem komputer, seperti : proses yang sedang aktif, aplikasi yang terinstall, pemakaian memory, pemakaian hard disk, dll;
- Menjalankan proses atau aplikasi melalui scripting, contoh : membuka aplikasi secara otomatis;
- Membuat jadwal (schedule) untuk menjalankan proses pada waktu tertentu;
- Mengelola komputer lokal ataupun remote (memerlukan kewenangan akses komputer).
Arsitektur WMI
Untuk memberikan gambaran mengenai bagaimana WMI bekerja, komponen (layer) yang terlibat didalamnya dan hubungan antar komponen tersebut. Berikut ini adalah diagram arsitektur WMI :Berdasarkan arsitektur WMI, komponen WMI meliputi :
- WMI Providers dan Managed Object
WMI Providers adalah sebuah object COM (Component Object Model) yang memonitor satu atau lebih managed object untuk WMI. Managed Object adalah komponen logic atau komponen fisik (seperti sistem operasi, process, service, hard drive, network adapter dll) yang akan dimonitor oleh object COM. - WMI Infrastructure
WMI Infrastructure adalah komponen pada sistem operasi Microsoft Windows. terdiri atas komponen : WMI service (termasuk WMI core) dan WMI Repository. WMI Repository merupakan kumpulan namespace WMI seperti root\default, root\cimv2, root\subscription, dll. WMI service berfungsi sebagai perantara antara provider, aplikasi management, dan WMI Repository. - WMI Consumers
WMI Consumers adalah aplikasi atau script yang berinteraksi dengan WMI Infrastructure. Aplikasi untuk memanage WMI dapat berupa query, enumerate data, menjalankan methods pada provider, atau subscribe pada events.WMI dapat diimplementasikan secara langsung melalui Command Line atau melalui penulisan script secara programatikal. Mekanisme yang dapat digunakan untuk menghubungkan WMI dan sistem informasi ke dalam WMI script disediakan oleh WMI Providers berupa : WMI Scripting Library’s SWbemLocator object dan WMI moniker.
Moniker dipandang lebih powerful karena memungkinkan digunakannya satu baris kode untuk mendeskripsikan dan memperoleh data pada sebuah WMI object maupun kumpulan WMI object
WMI Moniker
Secara sederhana moniker adalah sebuah string (display name) yang menyediakan lokasi dan informasi mengenai objek yang ingin di instantiate dalam script.WMI moniker terdiri atas tiga bagian, satu komponen bersifat mandatory berupa namespace (winmgmts: untuk WMI) dan dua komponen bersifat opsional (localization data dan security setting).
Seluruh WMI moniker harus dimulai dengan “winmgmts:”
1
| Set wmiServices = GetObject(“winmgmts:”) |
1
| Set wmiServices = GetObject( "WinMgmts:{impersonationLevel=impersonate}" _& "!root/cimv2:Win32_LogicalDisk=" C: "" ) |
WMI Moniker membutuhkan perintah tertentu untuk melakukan query guna mendapatkan data atau informasi dari WMI object yang dikenal sebagai WMI Query Language (WQL).
WMI Query Language
WMI Query Language (WQL) adalah bahasa yang digunakan untuk melakukan proses query untuk mendapatkan deskripsi, data, dan atau informasi object dari WMI, merupakan bagian dari American National Standards Institute Structured Query Language (SQL ANSI) dengan beberapa perubahan semantik untuk mendukung WMI sehingga perintah pada WQL memiliki kesamaan dengan perintah pada SQL.Sebagaimana SQL , WQL memiliki keyword dan operator untuk melakukan proses query. WQL keyword dapat dilihat di :
http://msdn.microsoft.com/en-us/library/aa394606(v=vs.85).aspx.
Query pada WQL bersifat read only sehingga tidak ada proses INSERT dan UPDATE dalam WQL. Keyword NULL, TRUE, dan FALSE tidak dapat digunakan dalam WQL. penggunaan keyword AND dan OR sedapat mungkin dibatasi, penggunaan query yang kompleks pada WQL dapat menyebabkan WMI mengembalikan kode kesalahan WBEMEQUOTAVIOLATION sebagai nilai HRESULT.
Klausa WHERE dapat digunakan dalam query untuk keyword, operator, dan konstanta. Semua klausa WHERE harus mengacu pada salah satu operator yang ditentukan dalam WQL.
WQL memiliki struktur perintah sebagai berikut :
1
2
| SELECT [Property Names] FROM [WMI Class] WHERE [EXPRESSION] SELECT [Property Names] FROM [WMI Class] WHERE [VALUE] LIKE [Wildcard Expression] |
1
2
| SELECT * from Win32_Process SELECT * FROM win32_service WHERE name LIKE 'microsoft%' |
- Data queries
Data queries digunakan untuk mengambil nilai class instances dan data associations dari object WMI. Query ini adalah yang paling banyak digunakan pada script WMI dan aplikasi.
Berikut contoh query (VB) untuk mendapatkan nilai event log dengan nama “Application” dari seluruh instance Win32NTLogEvent :123456strComputer =
"."
Set
objWMIService = GetObject(
"winmgmts:\\"
_
& strComputer &
"\root\CIMV2"
)
Set
colItems = objWMIService.ExecQuery( _
"SELECT * FROM Win32_NTLogEvent "
_
&
"WHERE Logfile = 'Application"
,,48)
- Event queries
Event queries digunakan untuk menerima notifikasi event. Berikut contoh query (VB) untuk mendapatkan notifikasi ketika instance baru pada class Win32NTLogEvent terbentuk:
12345678910111213strComputer =
"."
Set
objWMIService = GetObject(
"winmgmts:\\"
_
& strComputer &
"\root\CIMV2"
)
Set
objEvents = objWMIService.ExecNotificationQuery _
(
"SELECT * FROM __InstanceModificationEvent WITHIN 10 WHERE "
& _
"TargetInstance ISA 'Win32_Service'"
& _
" AND TargetInstance._Class = 'win32_TerminalService'"
)
i = TRUE
Do
While
i = TRUE
Set
strReceivedEvent = objEvents.NextEvent
'report an event
Wscript.Echo
"An event has occurred."
Loop
- Schema queries
Schema queries digunakan untuk menerima informasi mengenai definisi class (bukan instance dari class) dan skema yang terkait dengannya. Class providers menggunakan Schema queries untuk menentukan apakah class mereka didukung saat melakukan register. Contoh (VB):1SELECT * FROM meta_class WHERE __ this ISA
"Win32_BaseService"
WMI di Visual FoxPro
Sejak versi 7 Microsoft Visual FoxPro (vfp7) telah mendukung penggunaan moniker string : winmgmts: sebagai salah satu cara untuk mengakses objek COM melalui perintah getobject.Berikut contoh penggunaan moniker pada Visual FoxPro :
1
| owmi = getobject( "winmgmts:{impersonationlevel=impersonate}!\.\root\cimv2" ) |
Untuk memberikan gambaran penggunaan WMI moniker di Visual FoxPro jalankan perintah berikut pada command Visual FoxPro :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| cclass = "win32_computersystem" owmi = getobject( "winmgmts:" ) oitems = owmi.execquery( "select * from " + cclass) clear for each oitem in oitems ? alltrim(oitem.name) ? replicate( "-" , len(alltrim(oitem.name))) getproperties(oitem) next procedure getproperties(oitem as object) for each oproperty in oitem.properties_ if oproperty.isarray ? oproperty.name + " : [array]" else ? oproperty.name + " : " + ; iif(isnull(oproperty.value), "" , transform(oproperty.value)) endif next endproc |
Data dan informasi yang dihasilkan tentunya dapat ditampung dalam array, cursors atau disimpan dalam tabel untuk diproses lebih lanjut.
Untuk Microsoft Visual FoxPro versi 6 (vfp6) dan versi-versi sebelumnya yang belum mendukung moniker, akses WMI dapat dilakukan melalui perintah berikut :
1
2
| owmilocator = createobject( "wbemscripting.swbemlocator" ) owmi = owmilocator.connectserver( "." , "root\cimv2" ) |
Implementasi
Penulis menggunakan WMI pada Aplikasi Revisi di lingkungan Kementerian Keuangan. Aplikasi Revisi berfungsi untuk penyelesaian proses revisi anggaran, digunakan oleh Kantor Wilayah (Kanwil) Direktorat Jenderal Perbendaharaan (DJPbn) di seluruh Indonesia. Aplikasi Revisi menghubungkan Kanwil dengan server pusat yang berkedudukan di Jakarta dengan menggunakan jalur intranet.Aplikasi Revisi dikembangkan dengan menggunakan bahasa pemrograman Microsoft Visual FoxPro versi 9.0. WMI digunakan untuk memperoleh informasi mengenai status server apakah dapat terhubung melalui aplikasi dari sisi client (Kanwil).
WMI diimplementasikan pada form login dengan antar muka sebagai berikut :
Indikator koneksi berfungsi memberikan informasi kepada user mengenai status koneksi antara client dengan server pusat. Informasi koneksi diperoleh melalui perintah WMI yang dijalankan pada saat Activate form login dengan perintah sebagai berikut :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| _screen.AutoCenter = .T. _screen.Visible = .F. local oWMI, cAddress, oPings, oPing, oItem oWMI = getobject( "winmgmts:" ) cAddress = vDbIP if os() < "Windows 5.01" or os() = "Windows NT 4.00" RETURN ELSE oPings = oWMI.ExecQuery([ Select * from WIN32_Pingstatus where address= '] + cAddress + [']) FOR EACH oPing in oPings IF oPing.statuscode = 0 thisform.lbljudul.Caption= '' thisform.imgNet.Picture = '\IMAGES\NET_1.JPG' ELSE thisform.lbljudul.Caption= 'Error #1 : Request Timeout' thisform.imgNet.Picture = '\IMAGES\NET_0.JPG' ENDIF NEXT ENDIF |
oPings: Merupakan variabel untuk menampung hasil query dari perintah WQL:
1
| Select * from WIN32_Pingstatus where address=cAddress |
Image berupa icon network digunakan sebagai antar muka bagi user untuk mengetahui apakah server dapat dideteksi atau tidak. Indikator koneksi akan berwarna biru (NET1.JPG) jika komputer dapat mendeteksi keberadaan server dan berwarna merah (NET0.JPG) jika komputer tidak dapat mendeteksi keberadaan server (disertai keterangan status error).
Dengan melihat indikator koneksi, user dapat mengetahui status koneksi antara komputer client dengan server sebelum user login ke sistem aplikasi.
0 komentar:
Posting Komentar