Mengenal Windows Management Instrumentation (WMI)

Mengenal Windows Management Instrumentation (WMI)

Tutorial Information

ProgramMicrosoft Visual FoxPro
Version9.0
DifficultyMenengah - Mahir
Estimated Time45 Menit

Banyak cara dapat dilakukan untuk memperoleh data atau informasi mengenai sistem komputer yang kita gunakan (misalnya saja kapasitas dan pemakaian hard disk, kapasitas dan…

Banyak cara dapat dilakukan untuk memperoleh data atau informasi mengenai sistem komputer yang kita gunakan (misalnya saja kapasitas dan pemakaian hard disk, kapasitas dan penggunaan memory, proses yang berjalan, dll). Pada sistem operasi Windows informasi mengenai sistem komputer dapat diakses melalui : menu-menu yang terdapat pada kelompok menu Administrative Tools (Component Services, Computer Management, Event Viewer, System Configuration, dll) , melalui perintah msinfo32 pada command prompt, atau dengan menggunakan Windows Management Instrumentation (WMI).

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 :

  1. 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;
  2. Menjalankan proses atau aplikasi melalui scripting, contoh : membuka aplikasi secara otomatis;
  3. Membuat jadwal (schedule) untuk menjalankan proses pada waktu tertentu;
  4. Mengelola komputer lokal ataupun remote (memerlukan kewenangan akses komputer).

Kombinasi diatas memungkinkan kita untuk membuat sistem atau aplikasi yang dapat melakukan fungsinya secara otomatis jika kondisi atau parameter tertentu pada sistem operasi terpenuhi. Contoh : Pencatatan proses aktif ke log file dan notifikasi melalui email secara otomatis oleh sistem jika pemakaian memori komputer telah melebihi batasan yang telah ditentukan.

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 :

WMI - Diagram

Berdasarkan arsitektur WMI, komponen WMI meliputi :

  1. 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.
  2. 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.
  3. 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:”

Set wmiServices = GetObject(“winmgmts:”)

Berikut adalah contoh WMI moniker pada fungsi GetObject di VBSript tanpa menyertakan opsi komponen localization data dan security setting. Contoh WMI moniker dengan opsi security setting dan localization data adalah sebagai berikut:

Set wmiServices = GetObject("WinMgmts:{impersonationLevel=impersonate}"_& "!root/cimv2:Win32_LogicalDisk="C:"")

Catatan : Namespace WMI moniker winmgmts: bersifat case insensitive.

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 :

SELECT [Property Names] FROM [WMI Class] WHERE [EXPRESSION]
SELECT [Property Names] FROM [WMI Class] WHERE [VALUE] LIKE [Wildcard Expression]

Contoh :

SELECT * from Win32_Process
SELECT * FROM win32_service WHERE name LIKE 'microsoft%'

WQL mendukung tiga tipe query, yaitu :

  1. 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 :

    strComputer = "."  
    Set objWMIService = GetObject("winmgmts:\\" _     
        & strComputer & "\root\CIMV2")  
    Set colItems = objWMIService.ExecQuery( _     
        "SELECT * FROM Win32_NTLogEvent " _     
        & "WHERE Logfile = 'Application",,48)
    

    Catatan : WQL tidak mendukung tipe data array.

  2. Event queries
    Event queries digunakan untuk menerima notifikasi event. Berikut contoh query (VB) untuk mendapatkan notifikasi ketika instance baru pada class Win32NTLogEvent terbentuk:

    strComputer = "."  
    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
    
  3. 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):

    SELECT * 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 :

owmi = getobject("winmgmts:{impersonationlevel=impersonate}!\.\root\cimv2")

Titik (.) diantara backslash menunjukkan lokal komputer, dimana \root\cimv2 adalah default namespace untuk lokal komputer.

Untuk memberikan gambaran penggunaan WMI moniker di Visual FoxPro jalankan perintah berikut pada command Visual FoxPro :

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

Program diatas akan menghasilkan output berupa data dan informasi mengenai sistem komputer yang digunakan sebagai berikut :

WMI - BisaKomputer 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 :

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 :

WMI - BisaKomputer - 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 :

_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

oWMI: Merupakan variabel untuk menampung object WMI moniker “winmgmts:”.
oPings: Merupakan variabel untuk menampung hasil query dari perintah WQL:

Select * from WIN32_Pingstatus where address=cAddress

dimana cAddress merupakan alamat IP server yang berasal dari variabel public vDbIP (vDbIP diinisialisasi saat proses init). Selanjutnya program akan memeriksa nilai oPing.statuscode untuk setiap hasil pada oPings dimana oPing.statuscode akan bernilai 0 jika komputer dapat mendeteksi keberadaan IP server.

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.

Penutup

Mengenal fungsi WMI memungkinkan kita memperoleh data dan informasi pada sistem komputer lokal ataupun remote yang dapat dimanfaatkan dalam pembangunan sistem aplikasi baik untuk memperoleh informasi mengenai ketersediaan dukungan sistem ataupun untuk otomatisasi proses pada aplikasi.

Tag: , , , ,

Write Comment

Your email will not be published. The marked label is required.