www.tobuku.com
MANAJEMEN ASET IT - BAGIAN 1 MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION Mei 2006 Oleh : Feri Djuandi
Tingkat:
√ Pemula
Menengah
Mahir
Pendahuluan Windows Management Instrumentation (WMI) adalah bagian dari sistem operasi Microsoft Windows. WMI bukan hanya sebuah komponen tapi merupakan teknologi inti dan standar untuk pengelolaan Windows. WMI menjadi dasar dalam pemantauan dan pengontrolan yang konsisten dan seragam dalam pengelolaan sistem secara keseluruhan di dalam lingkungan Windows. WMI memungkinkan administrator sistem untuk menarik data, merubah dan memantau konfigurasi pada desktop dan server, aplikasi-aplikasi, jaringan dan komponen-komponen lainnya. Pada penerapannya, seorang programer dapat membuat sebuah program aplikasi dengan memanfaatkan WMI Scripting Library untuk bekerja dengan objek-objek WMI guna membuat berbagai perangkat manajemen dan monitor sistem. WMI mendukung sejumlah besar antar muka pemrograman seperti C++, Open Database Connectivity (ODBC), Visual Basic dan HTML yang para programer bisa gunakan untuk membuat aplikasi-aplikasi manajemen sistem yang spesifik. Untuk solusi-solusi yang sederhana, administrator sistem dapat membuat skrip dan menggunakan WMI untuk otomatisasi pekerjaan-pekerjaan administrasi seperti:
Menjalankan sebuah proses pada komputer lain
Menjadwalkan sebuah proses untuk jalan pada hari dan jam tertentu
Me-reboot komputer dari jarak jauh
Mendapatkan daftar aplikasi yang diinstal pada komputer lokal atau komputer lain
Menampikan Windows event log dari komputer lokal atau komputer lain
Hal lainnya, WMI dapat berintegrasi dengan komponen-komponen Windows lainnya seperti Active Directory. Kata “instrumentation” di dalam WMI mengacu pada kenyataan bahwa WMI dapat menampilkan informasi mengenai kondisi internal sistem komputer, mirip instrumen dashboard mobil yang membaca dan menampilkan informasi keadaan mesin. Instrumen-instrumen WMI dengan pemodelan objek seperti disk, process atau objek-objek lainnya ditemukan di dalam sistem Windows. Objek-objek ini dibuatkan modelnya melalui class-class seperti Win32_LogicalDisk atau Win32_Process.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
1
www.tobuku.com
Arsitektur WMI Komponen-komponen komponen arsitektural WMI adalah WMI provider, Common Information Model (CIM) Object Manager dan CIM repository.
Gambar 1.1. Arsitektur WMI. Komponen-komponen komponen fisikal atau logikal dari sistem komputer seperti BIOS, memori, hard h drive, network router, sistem database atau komponen sistem operasi disebut managed object. Sebuah managed object berkomunikasi dengan WMI melalui sebuah provider provider. WMI provider mirip dengan sebuah hardware device driver.. Jika Anda memiliki sebuah perangkat hardware (entah itu sound card, network interface card, penggerak CDROM dan sebagainya), akan dibutuhkan sebuah device driver agar komputer bisa berkomunikasi dengan hardware tersebut. Serupa dengan analogi tersebut, agar WMI bisa berkomunikasi dengan managed object, ia menggunakan WMI provider sebagai perantaranya. Sebuah provider adalah sebuah objek Component Object Model (COM)) yang memantau sebuah managed object untuk WMI. Provider juga menangani Windows message dari WMI ke managed object. Jadi komunikasi yang ditangani WMI provider adalah dua arah. Berikut ini adalah beberapa contoh WMI provider. provider Provider
DLL
Namespace
Keterangan
Active Directory
dsprov.dll
root root\directory\ldap
Memetakan objek-objek objek Active Directory ke WMI.
Event Log
ntevt.dll
root root\cimv2
Mengelola Windows event log.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
2
www.tobuku.com Performance Counter
wbemperf.dll
root\cimv2
Memberikan akses ke data unjuk kerja.
Registry
stdprov.dll
root\default
Membaca, menulis, mengumpulkan, memantau, membuat dan menghapus registry key dan registry value.
SNMP
snmpincl.dll
root\snmp
Memberikan akses ke data SNMP MIB dari SNMP-managed object.
WDM
wmiprov.dll
root\wmi
Memberikan akses ke informasi-informasi WDM device driver.
Win32
cimwin32.dll
root\cimv2
Memberikan informasi mengenai komputer, disk, file, folder, file system, jaringan, sistem operasi, proses, sekuriti, service dan sebagainya.
Windows Installer
msiprov.dll
root\cimv2
Memberikan akses ke informasi software yang diinstal.
Common Information Model Object Manager (CIMOM) mengelola komunikasi di antara WMI provider, CIM repository dan aplikasi-aplikasi manajemen dengan cara:
Mendaftarkan provider-provider yang ada di dalam sebuah sistem komputer
Meneruskan information request dari WMI kepada provider yang bersangkutan
Memproses perintah query yang berupa WMI Query Language (WQL)
Memvalidasi sekuriti
Memberikan infrastruktur untuk event monitoring
Catatan: WMI Query Language (WQL) adalah bagian dari standar American National Standards Institute Structured Query Language (ANSI SQL) dengan perubahan semantik yang minor untuk mendukung WMI. WQL ditulis untuk menjalankan data query – untuk mendapatkan data; event query – untuk mendaftarkan dan menerima pemberitahuan dari event-event; dan schema query - untuk mendapatkan definisi-definisi class dan hubungan skemanya. Tidak seperti perintah T-SQL pada database SQL Server dimana Anda bisa menulis query yang sangat kompleks, WQL relatif sederhana dan memiliki keterbatasan- keterbatasan. CIM repository adalah media penyimpanan terpusat digunakan oleh CIMOM untuk menyimpan daftar informasi tentang WMI provider dan aplikasi-aplikasi juga data manajemen. Pada prakteknya CIMOM lebih sering mendapatkan data dengan cara melakukan query kepada WMI provider daripada mendapatkan data tersebut dari CIM repository dimana datanya kedaluwarsa dengan cepat mengingat kondisi sistem yang terus berubah setiap saat (sebagai contoh sisa ruang hard disk). Selanjutnya CIMOM dan CIM repository disebut sebagai WMI infrastructure. WMI juga dilengkapi dengan WMI Scripting Library, yaitu sekumpulan objek-objek COM yang memungkinkan skrip-skrip berinteraksi dengan WMI infrastructure. Aplikasi-aplikasi manajemen adalah konsumen utama informasi-informasi WMI. Aplikasi-aplikasi ini bisa berupa skrip sederhana yang dibuat oleh administrator untuk menangani masalah manajemen tertentu seperti memeriksa sisa ruang hard disk hingga skrip kompleks yang dibuat Microsoft Systems Management Server (SMS) dan Microsoft Operations Manager (MOM). WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
3
www.tobuku.com
Instalasi WMI Untuk Windows versi-versi terbaru yaitu Windows Me, Windows 2000, Windows XP dan Windows Server 2003 - secara default WMI menjadi bagian dari instalasi sistem operasi tersebut. Namun untuk Windows 98 dan Windows NT 4.0, WMI tidak terinstal. WMI bisa diperoleh dari: http://www.microsoft.com/downloads
Program instalasinya tersebut bisa dicari dengan kata kunci “Windows Management Instrumentation (WMI) CORE 1.5 (Windows 95/98/NT 4.0).” Perhatikan bahwa Windows NT 4.0 membutuhkan Service Pack 4 atau lebih baru sebelum WMI bisa diinstal dan dijalankan. Software tambahan yang diperlukan untuk WMI meliputi:
Microsoft Internet Explorer versi 5.0 atau yang lebih baru
Windows Script Host (WSH). WSH secara default menjadi bagian sistem operasi Windows 2000, Windows XP, Windows Server 2003 dan Windows Me, tapi tidak pada Windows NT4 atau Windows 98. WSH dapat di-download dari: http://www.microsoft.com/downloads
Versi terakhir yang disertakan dalam Windows XP dan Windows Server 2003 adalah WSH 5.6. Untuk menguji instalasi WMI pada komputer Anda, silakan ikuti langkah-langkah berikut ini. 1. Ketik skrip sederhana di bawah ini dengan menggunakan Notepad. Skrip 1.1. Hostname.vbs. Dim oWMI, oItem, oItems, sDummy Set oWMI = GetObject("winmgmts:root\CIMV2") Set oItems = oWMI.execQuery("select * from win32_computersystem") For Each oItem In oItems sDummy = oItem.name Next Set oItem = Nothing Set oItems = Nothing Set oWMI = Nothing wscript.echo sDummy
2. Simpan filter tersebut dengan nama hostname.vbs. 3. Buka sebuah window command prompt dan pindahkan direktori ke tempat dimana file di atas disimpan. Pada prompt, ketik: hostname.vbs
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
4
www.tobuku.com
Gambar 1.2. Output hostname.vbs. Pada layar akan ditampilkan nama computer yang bersangkutan. Catatan: Skrip-skrip pada bagian ini bisa diperoleh dari direktori ..\VBS pada media yang disertakan bersama artikel ini. Program pendek di atas ditulis dengan VBScript (itu sebabnya ekstensi file file-nya nya adalah vbs) dan ia dijalankan oleh komponen scripting dari sistem operasi, yaitu Windows Script Host (WSH). WSH hanyalah salah satu antar muka pemrograman yang bisa digunakan untuk untuk mengakses WMI. Alternatif lainnya bisa digunakan Visual Basic, C++, bahkan mungkin program pengembangan aplikasi lainnya di luar Microsoft seperti Delphi dan PowerBuilder selama program program-program ini mendukung COM.
Koneksi ke WMI Sebelum objek-objek objek di dalam WMI bisa diakses, sebuah koneksi harus dibuat kepada WMI. Hal ini serupa dengan koneksi yang harus dibuat kepada database SQL Server sebelum objek-objek objek objek database di dalamnya bisa diakses. Salah satu alasan adanya mekanisme ini adalah sekuriti. Seperti dijelaskan sebelumnya, WMI adalah salah satu komponen inti di dalam sistem operasi untuk pengelolaan Windows. Dengan skrip yang dibuatnya, seorang administrator bisa masuk ke dalam sistem komputer lain dan melakukan hal-hal hal yang sensitif nsitif termasuk merubah konfigurasinya. Jika hal tersebut tidak dilindungi dengan mekanisme sekuriti yang tangguh, bisa dibayangkan bayangkan apa yang akan terjadi. Seseorang yang hendak mengakses objek objek-objek WMI baik itu di dalam komputernya lokalnya maupun komputer komputer lain di dalam jaringan, haruslah memiliki otoritas yang cukup dan otentikasi itu dilakukan oleh sekuriti Windows NT. Pada skrip 1.1 sebelumnya, baris “Set “ oWMI = GetObject( "winmgmts:root\CIMV2" )” akan membuat koneksi objek WMI yang terhubung ke sebuah path (istilah WMI path akan dijelaskan beberapa saat lagi). Nama komputer, user id atau password tidak terlihat di sini karena ini adalah koneksi standar ke komputer lokal menggunakan identitas user yang seda sedang ng logon ke sistem. Identitas user berikut hak-hak hak yang dimilikinya untuk selanjutnya disebut dengan credential. Cara untuk membuat koneksi ke WMI dengan menggunakan identitas tertentu disebut impersonation level level.. Untuk tujuan tertentu, impersonation level harus ditentukan pada saat koneksi WMI dibuat. Tanpa level yang sesuai, WMI mungkin akan menolak akses kepada objekobjek objeknya sehingga informasi tidak dapat diperoleh atau perintah operasi ditolak. Secara default, defa WMI menetapkan impersonation level sebagai wbemImpersonateLevelImpersonate yang artinya menggunakan WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
5
www.tobuku.com credential dari user yang bersangkutan. Pada tabel di bawah ini diperlihatkan level-level yang dikenal oleh WMI. Tabel 1.1. Impersonation Level Impersonation Level
Nilai
Keterangan
wbemImpersonationLevelAnonymous atau Anonymous
1
Menyembunyikan credential dari pemanggil. Akses ke WMI mungkin tidak akan berhasil menggunakan impersonation level ini.
wbemImpersonationLevelIdentify atau Identify
2
Membolehkan objek-objek untuk membaca credential dari pemanggil. Akses ke WMI mungkin tidak akan berhasil menggunakan impersonation level ini.
wbemImpersonationLevelImpersonate atau Impersonate
3
Membolehkan objek-objek untuk menggunakan credential dari pemanggil. Ini adalah impersonation level yang paling dianjurkan untuk pemrograman WMI guna pemanggilan API.
wbemImpersonationLevelDelegate atau Delegate
4
Membolehkan objek-objek untuk mengijinkan objek-objek lain menggunakan credential dari pemanggil. Penggunaan level ini mengandung resiko sehingga faktor sekuritinya harus diperhitungkan.
Pendek kata, pilihan impersonation level pada WMI mengatakan pada sistem credential siapa yang digunakan ketika panggilan atau akses ke objek WMI dilakukan. Dengan cara ini, pembuat program atau administrator dapat membatasi siapa saja yang bisa membuat perubahan pada sistem. Kembali kepada skrip 1.1 - jika impersonation level hendak ditentukan, maka informasi terseut harus ditambahkan pada parameter koneksinya seperti pada contoh di bawah ini. Set oWMI = GetObject("winmgmts:{impersonationLevel=impersonate}! root\cimv2");
Pada perintah diatas, impersonation level ditetapkan sebagai wbemImpersonationLevelImpersonate yang artinya objek-objek WMI akan diakses dengan menggunakan credential dari pemanggil atau user yang bersangkutan. Cara lainnya diperlihatkan pada perintah di bawah ini dimana impersonation level ditentukan melalui property ImpersonationLevel dari objek Security_. Set oWMI = GetObject("winmgmts: root\cimv2") oWMI.Security_.ImpersonationLevel = 3
Dua cara di atas akan bekerja dengan baik, pilihannya diserahkan pada penggunanya. Modifikasi hostname.vbs dengan menggunakan cara pertama diperlihatkan pada skrip di bawah ini. Skrip 1.2. Hostname2.vbs. Dim oWMI, oItem, oItems, sDummy Set
oWMI = GetObject ("winmgmts:{impersonationLevel=impersonate}! root\CIMV2") Set oItems = oWMI.execQuery("select * from win32_computersystem") For Each oItem In oItems sDummy = oItem.name Next Set oItem = Nothing
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
6
www.tobuku.com Set oItems = Nothing Set oWMI = Nothing wscript.echo sDummy Modifikasi hostname.vbs dengan menggunakan cara ke-dua ke dua diperlihatkan pada skrip di bawah ini. Perhatikan bahwa impersonation level level-nya ditetapkan sebagai Anonymous. Skrip 1.3. Hostname3.vbs. Dim oWMI, oItem, oItems, sDummy Set oWMI = GetObject("winmgmts:root\CIMV2") GetObject("winmgmts:root oWMI.Security_.ImpersonationLevel = 1 Set oItems = oWMI.execQuery("select * from win32_computersystem") For Each oItem In oItems sDummy = oItem.name Next Set oItem = Nothing Set oItems = Nothing Set oWMI = Nothing wscript.echo sDummy Berikut ini adalah output dari skrip di atas.
Gambar 1.3. Output hostname3.vbs. Silakan mengganti impersonation level-nya level dengan 2,3 atau 4.
Struktur WMI WMI adalah sebuah komponen yang memiliki class-class class class sangat banyak jumlahnya dengan d relasi yang sedemikian kompleksnya. Sedemikian luas dan rumitnya sehingga tanpa sebuah panduan Anda akan WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
7
www.tobuku.com tersesat di dalamnya bagai berputar-putar berputar di hutan belantara tanpa berujung. Untungnya class-class class WMI diorganisasikan secara teratur di dalam sebuah s struktur yang dinamakan WMI schema schema. WMI schema pada dasarnya menggambarkan pohon struktur class-class class class di dalam WMI dan pengelompokannya. Sekumpulan class-class class dikelompokkan dalam sebuah lingkungan yang disebut namespace (bagi seorang programer .NET tentunya tidak asing lagi dengan istilah namespace.) Di dalam WMI ada sejumlah namespace dengan hirarki dan hubungan tertentu, dan masing-masing masing masing namespace memiliki nama. Puncak dari hirarki namespace tersebut adalah root.. Jika memperhatikan parameter koneksi WMI ““Set oWMI = GetObject( "winmgmts:root\CIMV2" "winmgmts:root )”, tampak satunya adalah teks “root\CIMV2 CIMV2”. ”. Ini adalah sebuah WMI path yang mengacu ke namespace CIMV2 di bawah namespace root. Menentukan WMI path adalah menentukan jalan menuju objek yang akan diakses. Pada gambar di bawah ini diperlihatkan namespace-namespace di dalam WMI.
Gambar 1.4. 1. Namespace-namespace di dalam WMI. Jika tertarik untuk mengetahui daftar semua namespace di dalam WMI, silakan mengetik me skrip ini dan menjalankannya pada command prompt. Skrip 1.4. 4. GetAllNamespaces.vbs. strComputer = "." Call EnumNameSpaces("root") Sub EnumNameSpaces(strNameSpace) WScript.Echo strNameSpace Set objWMIService = GetObject("winmgmts:\\" GetObject("winmgmts: & strComputer & " "\" & strNameSpace) Set colNameSpaces = objWMIService.InstancesOf("__NAMESPACE") For Each objNameSpace In colNameSpaces Call EnumNameSpaces(strNameSpace & "\" " " & objNameSpace.Name) Next End Sub
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
8
www.tobuku.com Berikut ini adalah output dari skrip tersebut.
Gambar 1. 1.5. Output GetAllNamespaces.vbs. Berkaitan dengan topik yang dibahas artikel ini, CIMV2 adalah satu-satunya satunya yang akan diulas dari seluruh namespace yang ada. Walaupun demikian, nanti akan diperlihatkan bahwa ada begitu ba banyak class yang ada di dalam namespace ini sehingga uraian pada artikel ini pun tidak akan cukup membahas satu per satu class yang ada di dalam namespace tersebut. Jika tertarik untuk mengetahui daftar semua class di dalam namespace root\CIMV2,, silakan mengetik men skrip ini dan menjalankannya pada command prompt. Skrip 1.5. GetAllClasses.vbs. strComputer = "." Set
objWMIService = GetObject("winmgmts: " GetObject("winmgmts:\\" "\root\cimv2") Set colClasses = objWMIService.SubclassesOf()
&
strComputer
&
For Each objClass In colClasses colClass WScript.Echo objClass.Path_.Path Next
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
9
www.tobuku.com
Berikut ini adalah output dari skrip tersebut.
Gambar 1.6. Output GetAllClasses.vbs. Untuk masuk lebih jauh ke dalam sebuah class, property dari class yang bersangkutan dapat ditampilkan. Sebagai contoh, pada skrip di bawah ini dipilih ilih sebuah class yaitu Win32_ComputerSystem. Skrip 1.6. Win32_ComputerSystem.vbs. Win32_ComputerSystem.vbs Dim oItem, oItems, strComputerName FDJUANDI" strComputerName = "HO-FDJUANDI" on error resume next Set
oItems = GetObject("winmgmts:{impersonationLevel=impersonate}! Win32_ComputerSystem.Name=""" & strComputerName & """") For Each oItem In oItems.Properties_ wscript.echo oItem.name & ": " & oItem.value Next Set oItem = Nothing Set oItems = Nothing
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
10
www.tobuku.com
Berikut ini ni adalah output dari skrip tersebut.
Gambar 1.7. 1. Output Win32_ComputerSystem.vbs. Skrip diatas dapat dimodifikasi dengan mengganti class-nya nya menjadi Win32_PointingDevice, Win32_DiskDrive, Win32_PhysicalMemory dan sebagainya. Cukup menyenangkan bisa mengetahui banyak hal mengenai pernik-pernik pernik di dalam sistem komputer kita yang selama ini tidak dieksplorasi. Dengan bekerja bek pada level property dari class-class class inilah waktu kita akan banyak dihabiskan di dalam artikel ini.
Mengenal COM API untuk WMI Pada uraian sebelumnya telah dijelaskan apa yang dimaksud dengan WMI dan apa saja yang terkandung di dalamnya. Dari arsitektur ur WMI yang diperlihat oleh gambar 1.1 diperlihatkan bahwa antar muka pemrograman (skrip atau aplikasi) tidak mengakses objek objek-objek objek WMI secara langsung, melainkan lewat sebuah lapisan yang dinamakan COM Application Programming Interface (API)) untuk WMI. Jadi, contohcontoh contoh skrip yang telah diperlihatkan sejak awal pembahasan ini sesungguhnya menggunakan API ini sebagai antar muka untuk mendapatkan layanan-layanan WMI. Catatan: API adalah sebuah istilah yang generik. Menurut definisinya API adalah sekumpulan rutin, protokol dan perangkat untuk membuat software software-software software aplikasi. Sebuah API yang baik akan mempermudah seorang programer untuk mengembang mengembangkan kan software dengan menyediakan blok blokblok modul yang bisa dirangkai atau disusun bersama-sama. bersama sama. Kata “interface” pada API merujuk pada arti antar muka yang sesungguhnya, yaitu seorang programer tidak perlu mengetahui sistem yang ada dibelakang antar muka ititu, u, bagaimana sisitem itu bekerja, bagaimana komponen-komponen komponen internal di dalamnya berinteraksi satu sama lain dan kerumitan lainnya. Programer tidak akan bersentuhan langsung dengan itu, namun ia akan berkomunikasi dengan sistem tersebut melalui blok-blok modul yang ada di kulit luar sistem tersebut – antar mukanya. Di dalam dunia pemrograman dikenal dikenal banyak bentuk API, misalnya native API (contohnya Win32 API), COM dan .NET. Pada prakteknya, cara programer berkomunikasi dengan API bisa melalui pemanggilan prosedur dan fungsi secara langsung atau pendeklarasian class, tergantung dari arsitektur API yang bersangkutan. API standar yang dikembangkan Microsoft untuk WMI adalah berbentuk COM. Konsep COM API untuk WMI pada dasarnya serupa a dengan model komponen-komponen komponen COM lainnya – tidak ada yang terlalu khusus. WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
11
www.tobuku.com Yang penting, class-class apa yang ada di dalam API tersebut harus diketahui, demikian juga property dan method yang tersedia di dalam masing-masing class. Penting untuk bisa membedakan class-class WMI dan class-class di dalam COM API untuk WMI. Mereka adalah dua hal yang berbeda. Sebagai ilustrasinya bayangkan seperti ini: Anda memiliki sebuah database SQL Server dengan objek-objek di dalamnya seperti table, view, stored procedure dan sebagainya. Analogikan database SQL Server ini sebagai WMI. Untuk bisa mengakses database dan table-table di dalamnya, maka digunakan sebuah COM API, yaitu ADODB. Nah, analogikan ADODB ini dengan COM API untuk WMI. Dengan demikian, jika sedang berbicara mengenai class atau objek maka penting untuk bisa membedakan konteks mana yang sedang dibicarakan – apakah API-nya atau WMI itu sendiri. Catatan: Pada artikel ini istilah class dan objek digunakan secara bergantian. Class dan objek adalah dua hal yang berbeda. Class adalah cetakan atau pola sebuah objek sehingga ia sendiri tidak pernah berwujud. Sementara itu, sebuah objek adalah manifestasi dari class yang bersangkutan. Dari sebuah class dapat dihasilkan sebuah atau beberapa objek. Jadi bisa dibayangkan class sebagai sebuah cetakan mainan plastik, sementara objek adalah mainan itu sendiri. Cetakannya hanya satu, tapi mainannya bisa dicetak berulang kali hingga banyak jumlahnya. Itu adalah konsep awal Object Oriented Programming (OOP.) artikel ini tidak akan membahas teori OOP oleh karena itu pembaca diharapkan sudah memahami hal tersebut. Pada beberapa literatur, istilah objek kadang-kadang disebut juga instance. Sebuah objek dalam sebuah program akan berwujud pada saat program tersebut dijalankan dan objek tersebut dibuat (instantiated) untuk kemudian keberadaannya dialokasikan pada memori komputer. Di dalam sebuah program, sebuah objek diacu dengan sebuah variabel. Variabel ini tidak menampung objek tersebut secara utuh, melainkan berisi sebuah alamat (pointer) yang menunjuk keberadaan objek tersebut di memori komputer. Pada tabel di bawah ini diperlihatkan class-class untuk objek-objek pemrograman WMI yang terdapat di dalam COM API untuk WMI. Tabel 1.2. Objek-objek WMI Objek
Keterangan
SWbemDateTime
Merekonstruksi dan memformat nilai datetime CIM. Objek ini ada di dalam Windows XP.
SWbemEventSource
Mengambil informasi event-event sehubungan dengan SWbemServices.ExecNotificationQuery.
SWbemLastError
Memberikan informasi kesalahan yang lebih lengkap ketika terjadi kesalahan.
SWbemLocator
Mendapatkan objek SWbemServices dapat mengakses WMI pada komputer tertentu.
SWbemMethod
Mengandung sebuah definisi method WMI.
SWbemMethodSet
Mendapatkan kumpulan (collection) objek-objek SWbemMethod.
SWbemNamedValue
Mengandung sebuah named value.
SWbemNamedValueSet
Mendapatkan akses ke kumpulan objek-objek SWbemNamedValue.
SWbemObject
Mengandung dan memanipulasi sebuah class objek WMI.
SWbemObjectEx
Melengkapi fungsi SWbemObject. Objek ini menambahkan method Refresh untuk objek-objek SWbemRefresher. Objek ini tidak ada pada
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
12
www.tobuku.com Windows 2000, Windows NT 4.0 dan Windows Me/98/95 SWbemObjectPath
Menghasilkan dan memeriksa object path.
SWbemObjectSet
Mendapatkan akses ke kumpulan objek-objek SWbemObject.
SWbemPrivilege
Menetapkan atau menghapus sebuah hak (privilege.)
SWbemPrivilegeSet
Mendapatkan akses ke kumpulan objek-objek SWbemPrivilege.
SWbemProperty
Mengnadung sebuah property WMI.
SWbemPropertySet
Mendapatkan akses ke kumpulan objek-objek SWbemProperty.
SWbemQualifier
Contains a single property qualifier.
SWbemQualifierSet
Mendapatkan akses ke kumpulan objek-objek SWbemQualifier.
SWbemRefresher
Mengumpulkan dan memperbaharui nilai-nilai property dari objek dengan sekali operasi. Objek ini tidak ada pada Windows 2000, Windows NT 4.0 dan Windows Me/98/95.
SWbemRefreshableItem
Mewakili sebuah elemen yang bisa diperbaharui di dalam sebuah objek SWbemRefresher, seperti property. Objek ini tidak ada pada Windows 2000, Windows NT 4.0 dan Windows Me/98/95.
SWbemSecurity
Mengelola seting sekuriti seperti COM Privilege, AuthenticationLevel, dan ImpersonationLevel.
SWbemServices
Membuat, merubah dan mendapatkan instance atau class.
SWbemServicesEx
Menambah fungsi dari SWbemServices. Objek ini menambahkan method Put dan PutAsync untuk membolehkan sebuah class atau instance untuk disimpan di beberapa namespace. Objek ini tidak ada pada Windows 2000, Windows NT 4.0 dan Windows Me/98/95.
SWbemSink
Mendapatkan hasil dari operasi-operasi asynchronous dan event notification, yang digunakan oleh aplikasi-aplikasi klien.
Masing-masing class di atas memiliki method dan property yang cukup lengkap. Daftar class dari API di atas dan keterangannya mungkin akan sangat membingungkan karena asing kedengarannya. Tidak perlu kuatir dengan itu, karena kita akan mengupasnya perlahan-lahan - lagipula berkaitan dengan topik pada artikel ini, kita hanya akan membahas beberapa class saja. Jika tertarik untuk mengetahui lebih jauh mengenai COM API untuk WMI ini, silakan mendapatkan informasinya di dalam Microsoft Developer Network (MSDN), Internet atau CD. Seperti telah disebutkan, API untuk WMI berbentuk COM. Dan sebagaimana layaknya sebuah objek COM, maka sebelum objek itu bisa digunakan di dalam sebuah program maka ia harus diinisiasi (misalnya dengan perintah CreateObject.) Sekarang mari perhatikan potongan dari skrip 1.1 yang telah dibuat sebelumnya. Pada bagian yang mana Anda bisa melihat objek-objek dari COM yang dimaksud? Apakah Anda menjumpai objek SwbemLocator, SwbemService atau SwbemObject misalnya? Mungkin tidak, lalu bagaimana penjelasannya? Dim oWMI, oItem, oItems, sDummy Set oWMI = GetObject("winmgmts:root\CIMV2") Set oItems = oWMI.execQuery("select * from win32_computersystem") ...
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
13
www.tobuku.com
Catatan: Contoh-contoh skrip pada bagian ini menggunakan bahasa pemrograman VBScript. Jika hendak menggunakan bahasa lain seperti Jscript atau C++, Anda harus memodifikasi sintaks-sintaksnya agar bisa dijalankan pada interpreter/compiler yang bersangkutan. Alasan mengapa objek-objek API WMI tidak dijumpai pad baris-baris di atas adalah karena skrip ini menggunakan cara moniker. Moniker artinya shortcut atau jalan pintas untuk mengakses objek-objek WMI. Sekalipun objek-objek API WMI tidak disebut-sebut namanya, sesungguhnya skrip ini tetap menggunakan objek-objek itu. Penulisan program WMI dengan cara moniker dikenal oleh bahasa-bahasa pemrograman dan bisa dengan berjalan baik. Lalu bagaimana seandainya kita tidak ingin menggunakan cara moniker? Penulisan program WMI menggunakan cara “tradisional” akan sedikit lebih panjang, tapi dari baris-baris programnya akan terlihat urutan prosesnya sehingga mendapat pemahaman lebih baik mengenai pemrograman antar muka WMI. Pada umumnya ada tiga objek API yang sering dipakai saat akan mengakses objek-objek WMI:
SwbemLocator
SwbemService
SwbemObject
Objek SwbemLocator SwbemLocator adalah objek koneksi atau lebih sering disebut locator yang memungkinkan kita untuk mendapatkan layanan WMI baik dari komputer local atau komputer lain. Mode integrated security (menggunakan credential dari user yang sedang logon) bisa digunakan pada saat membuat koneksi, atau menggunakan credential lain. SwbemLocator adalah objek yang pertama dalam skrip yang harus ditangani karena ia adalah objek koneksi. Koneksi harus dibuat ke WMI sebelum objek-objek di dalamnya bisa diakses. Objek SwbemLocator dibuat dengan cara sebagai berikut. Dim objLocator Set objLocator = CreateObject("WbemScripting.SwbemLocator") Catatan: Baris perintah di atas mengandung teks “WbemScripting”. Web Based Enterprise Management (WBEM) adalah pondasi untuk WMI. WBEM mengandung standar-standar untuk pengaksesan dan presentasi data manajemen di dalam sebuah enterprise. WBEM berpijak pada sebuah skema yang disebut Common Information Model (CIM) yang merupakan standar industri dikembangkan oleh Desktop Management Task Force (DMTF). Objek locator WMI ini hanya memiliki sebuah method yaitu ConnectServer. Method ini akan mengembalikan objek SwbemService yang mewakili layanan WMI dari komputer yang buat koneksinya. Pemanggilan ConnectServer tanpa parameter akan terhubung ke layanan WMI komputer lokal menggunakan integrated security. Contoh: Dim objLocator, objSvc Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objSvc = objLocator.ConnectServer()
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
14
www.tobuku.com Cara lainnya yang umum digunakan pada ConnectServer adalah membuat koneksi ke komputer lain seperti pada sintaks di bawah ini. Set objSvc = objLocator.ConnectServer("Server1", "root\cimv2", "administrator", "standard") Berikut ini adalah sintaks method ConnectServer selengkapnya. objwbemServices = SwbemLocator.ConnectServer( [ strServer = "." ], [ strNamespace = "" ], [ strUser = "" ], [ strPassword = "" ], [ strLocale = "" ], [ strAuthority = "" ], [ iSecurityFlags = 0 ], [ objwbemNamedValueSet = 0 ] )
Nama Parameter
Keterangan
strServer
Opsional. Nama komputer yang akan diakses. Jika komputer tersebut berada pada domain yang berbeda, maka nama komputer harus disebutkan secara lengkap bersama nama domain-nya, contoh “myServerName.fullyQualifiedDomain”. Jika parameter ini dikosongkan, maka akses secara default diarahkan ke komputer lokal.
strNamespace
Opsional. String yang menyebutkan namespace yang akan digunakan, contoh “root\default”. Jika parameter ini dikosongkan, maka namespace yang akan digunakan adalah namespace default yang dikonfigur untuk pemrograman tersebut (umumnya “root\CIMV2”).
strUser
Opsional. Nama user yang digunakan untuk membuat koneksi. Format string ini bisa hanya menyebutkan nama user-nya saja atau lengkap dengan nama domain-nya seperti Domain\Username. Jika parameter ini dikosongkan artinya mode yang digunakan adalah integrated security. Parameter strUser hanya bisa digunakan jika hendak mengakses komputer lain. Jika parameter ini diisi saat membuat koneksi ke komputer lokal, maka koneksi akan gagal.
strPassword
Opsional. String yang berisi password dari user. Parameter ini diabaikan pada mode integrated security. Parameter strPassword digunakan bersama parameter strUser saat membuat koneksi ke komputer lain. Jika otentikasi yang dipilih adalah Kerberos, nama user dan password pada strUser dan strPassword tidak dapat dicuri di dalam jaringan.
strLocale
Opsional. String ini digunakan untuk menetapkan kode lokalisasi. Untuk kode Microsoft formatnya adalah “MS_xxxx”, dimana xxxx adalah string dalam bentuk heksadesimal yang mengindikasikan LCID. Contoh untuk American English adalah “MS_409”.
strAuthority
Parameter ini bersifat opsional. Jika digunakan, pilihannya hanya Kerberos atau NTLMDomain.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
15
www.tobuku.com Kerberos: Jika parameter strAuthority dimulai dengan string “Kerberos:”, maka otentikasi yang digunakan adalah Kerberos dan parameter ini harus berisi Kerberos principal name. Kerberos principal name ditetapkan sebagai Kerberos:domain, misalnya Kerberos:MyDomain. NTLMDomain: Untuk menggunakan otentikasi NT Lan Manager (NTLM) parameter ini diisi sebagai NTLMDomain:domain, misalnya NTLMDomain: MyDomain. Jika parameter ini dikosongkan, sistem operasi bernegosiasi dengan COM untuk menentukan otentikasi NTLM atau Kerberos yang akan digunakan. Parameter ini hanya digunakan untuk koneksi ke komputer lain. Jika strAuthority diisi untuk koneksi komputer lokal, prosesnya akan gagal. Jika nama domain sudah diisi pada strUser, maka nama domain jangan diisi lagi pada strAuthority. Jika nama domain disebutkan pada dua parameter ini, prosesnya akan gagal dengan pesan kesalahan “Invalid Parameter“. iSecurityFlags
Opsional. Digunakan untuk mengirim ke ConnectServer. Nilai flag: 0: Pemanggilan ConnectServer akan kembali setelah koneksi ke komputer berhasil dibuat. Hal ini akan mengakibatkan program menjadi hang jika koneksi tidak berhasil dibuat. 128: Pemanggilan ConnectServer dijamin kembali dalam 2 menit atau kurang. Flag ini digunakan untuk mencegah program hang jika koneksi gagal.
objwbemNamedValueSet
Opsional. Umumnya parameter ini tidak didefinisikan.
Jika berhasil, method ConnectServer akan mengembalikan objek SWbemServices yang merujuk ke namespace yang ditetapkan di dalam parameter strNamespace dari komputer yang ditetapkan dalam parameter strServer. Setelah pemanggilan ConnectServer, objek Err bisa mengandung salah satu kode kesalahan dari kode-kode berikut ini. Kode Kesalahan
Keterangan
wbemErrAccessDenied 2147749891 0x80041003
Nama user dan password salah atau tidak memiliki otoritas untuk membuat koneksi.
wbemErrFailed 2147749889 0x80041001
Kesalahan yang tidak diketahui.
wbemErrInvalidNamespace 2147749902 0x8004100E
Namespace tidak ditemukan di komputer tersebut.
wbemErrInvalidParameter 2147749896 0x80041008
Terjadi kesalahan pengisian parameter, atau namespace tidak bisa digapai.
wbemErrOutOfMemory 2147749894
Memori tidak cukup.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
16
www.tobuku.com 0x80041006 wbemErrTransportFailure 2147749909
Terjadi kesalahan pada jaringan.
Method ConnectServer digunakan jika hendak membuat koneksi dengan nama user yang berbeda (berikut password-nya) pada komputer lain karena cara moniker tidak bisa digunakan untuk menetapkan nama user yang lain. Cara moniker terbatas hanya untuk integrated security. Namun demikian, moniker bukanlah pilihan yang jelek seandainya program yang dibuat memang ingin dibatasi sekuritinya agar hanya bisa mengakses komputer lokal.
Objek SwbemService, SwbemObjectSet dan SwbemObject SwbemService adalah objek yang dikembalikan oleh method SwbemLocator.ConnectServer. Setelah koneksi WMI berhasil dibuat, objek SwbemService digunakan untuk mendapatkan layanan-layanan WMI dari komputer yang terhubung. Method yang sering digunakan pada objek SwbemService adalah InstancesOf, yang mengembalikan semua instance dari class WMI. Method lainnya adalah Get yang digunakan untuk mendapatkan property-property dan yang terakhir adalah ExecQuery untuk menjalankan perintah WQL. Di bawah ini adalah contoh skrip untuk pemakaian method InstancesOf. Dim objLocator, objSvc, objSet Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objSvc = objLocator.ConnectServer() Set objSet = objSvc.InstancesOf( "win32_NetworkAdapterConfiguration") Contoh lainnya jika menggunakan method ExecQuery: ... Set objSet = objSvc.ExecQuery( "select * from Win32_NetworkAdapterConfiguration where IPEnabled='true'") Pada dua contoh di atas, variabel objSet mengandung sebuah collection SwbemObjects yang objeknya bisa diperoleh menggunakan iterasi. Dim objNic For Each objNic In objSet Wscript.Echo(objNic.Caption) Next Method Get hanya mengembalikan sebuah objek. Hal itu karena Get mengambil property kunci dari sebuah objek, dimana ia adalah unik. Contoh: Dim objLocator, objSvc, objNic Set objLocator = CreateObject("WbemScripting.SwbemLocator") Set objSvc = objLocator.ConnectServer() Set objNic = objSvc.Get ("win32_NetworkAdapterConfiguration.Index = 1") Berikut ini adalah sintaks method InstancesOf selengkapnya. objWbemObjectSet = SwbemService.InstancesOf( strClass, [ iFlags = wbemFlagReturnImmediately ], WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
17
www.tobuku.com [ objWbemNamedValueSet = null ] ) Nama Parameter
Keterangan
strClass
Harus diisi. String yang mengandung nama class. Parameter ini tidak boleh dikosongkan.
iFlags
Opsional. Parameter ini menentukan seberapa dalam enumerasi (pengumpulan informasi) mengembalikan objek-objek termasuk objek-objek dibawahnya. Parameter ini juga menentukan seberapa cepat pemanggilan fungsi berakhir dan kembali. Nilai default parameter ini adalah wbemFlagReturnImmediately. Alternatif nilainilai parameter iFlags adalah sebagai berikut.
objWbemNamedValueS et
wbemFlagForwardOnly 32 0x20 wbemFlagBidirectional 0 0x0
Forward-only. Operasi umumnya jauh lebih cepat dam menggunakan sedikit memori.
wbemFlagReturnImmediately 16 0x10 wbemFlagReturnWhenComplet e 0 0x0 wbemQueryFlagShallow 1 0x1
Nilai default. Flag ini menyebabkan pemanggilan kembali dengan segera.
wbemQueryFlagDeep 0 0x0
Nilai default value parameter ini. Opsi ini membuat enumerasi memasukkan semua class di dalam hirarki.
wbemFlagUseAmended Qualifiers 131072 0x20000
WMI akan mengembalikan data modifikasi class dengan definisi class dasar.
WMI akan mempertahankan pointer ke objek WMI sampai klien melepaskan enumerator-nya.
Menyebakan panggilan memblok panggilan lain sampai query selesai. Flag ini digunakan pada mode synchronous. Memaksa enumerasi untuk memasukkan juga immediate subclas (turunan pertama dari class) dari parent class tersebut.
Opsional. Umumnya parameter ini tidak didefinisikan.
Jika pemanggilan berhasil, method ini mengembalikan sebuah objek SWbemObjectSet. Setelah pemanggilan InstancesOf, objek Err bisa mengandung salah satu kode kesalahan dari kode-kode berikut ini. Kode Kesalahan
Keterangan
wbemErrAccessDenied 2147749891 0x80041003
User tidak memiliki akses untuk melihat instance dari class tersebut.
wbemErrFailed 2147749889 0x80041001
Kesalahan yang tidak diketahui.
wbemErrInvalidClass 2147749904 0x80041010
Class tidak valid
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
18
www.tobuku.com wbemErrInvalidParameter 2147749896 0x80041008
Kesalahan pada parameter yang dimasukkan.
wbemErrOutOfMemory 2147749894 0x80041006
Memori tidak cukup.
Dengan memodifikasi skrip 1.1, akan diperoleh skrip di bawah ini untuk menghasilkan output yang sama. Skrip 1.7. Hostname4.vbs. Dim objLocator, objSvc, objSet, objItem Set Set Set For
objLocator = CreateObject("WbemScripting.SwbemLocator") objSvc = objLocator.ConnectServer(".", "root\cimv2" ) objSet = objSvc.InstancesOf( "win32_computersystem") Each objItem In objSet sDummy = objItem.name Next Set Set Set Set
objItem= Nothing objSet = Nothing objSvc = Nothing objLocator = Nothing
wscript.echo sDummy Sementara itu, berikut ini adalah sintaks method ExecQuery selengkapnya. objWbemObjectSet = SwbemService.ExecQuery( strQuery, [ strQueryLanguage = "WQL" ], [ iFlags = wbemFlagReturnImmediately ], [ objWbemNamedValueSet = null ] ) Nama Parameter
Keterangan
strQuery
Harus diisi. String yang berisi perintah query. Parameter ini tidak boleh dikosongkan.
strQueryLanguage
Opsional. String yang mengandung bahasa query yang akan digunakan. Diisi dengan "WQL".
iFlags
Opsional. Integer yang menentukan perilaku query dan menentukan bagaimana pemanggilan ini berakhir/kembali. Nilai default parameter ini adalah wbemFlagReturnImmediately. Berikut ini adalah alternatif nilai yang bisa diisi. wbemFlagForwardOnly 32 0x20 wbemFlagBidirectional 0
Forward-only. Operasi umumnya jauh lebih cepat dam menggunakan sedikit memori. WMI akan mempertahankan pointer ke objek WMI sampai klien melepaskan enumerator-nya.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
19
www.tobuku.com 0x0
objWbemNamedValueSet
wbemFlagReturnImmediately 16 0x10 wbemFlagReturnWhenComplete 0 0x0
Nilai default. Flag ini menyebabkan pemanggilan kembali dengan segera.
wbemQueryFlagPrototype 2 0x2
Digunakan untuk prototyping. Query tidak akan dijalankan tapi akan mengembalikan sebuah objek yang tampaknya serupa dengan hasil query.
wbemFlagUseAmendedQualifiers 131072 0x20000
WMI akan mengembalikan data modifikasi class dengan definisi class dasar.
Menyebakan panggilan memblok panggilan lain sampai query selesai. Flag ini digunakan pada mode synchronous.
Opsional. Umumnya parameter ini tidak didefinisikan.
Jika pemanggilan berhasil, method ini mengembalikan sebuah objek SWbemObjectSet. Setelah pemanggilan ExecQuery, objek Err bisa mengandung salah satu kode kesalahan dari kode-kode berikut ini. Kode Kesalahan
Keterangan
wbemErrAccessDenied 2147749891 0x80041003
User tidak memiliki akses untuk melihat hasil query.
wbemErrFailed 2147749889 0x80041001
Kesalahan yang tidak diketahui.
wbemErrInvalidParameter 2147749896 0x80041008
Kesalahan pada parameter yang dimasukkan.
wbemErrInvalidQuery 2147749911 0x80041017
Perintah query tidak valid.
wbemErrInvalidQueryType 2147749912 0x80041018
Bahasa query tidak didukung.
wbemErrOutOfMemory 2147749894 0x80041006
Memori tidak cukup.
Dengan memodifikasi skrip 1.1, bias juga didapatkan output yang sama dengan menggunakan ExecQuery seperti di bawah ini. Skrip 1.8. Hostname5.vbs. Dim objLocator, objSvc, objSet, objItem Set Set Set For
objLocator = CreateObject("WbemScripting.SwbemLocator") objSvc = objLocator.ConnectServer(".", "root\cimv2" ) objSet = objSvc.ExecQuery( "SELECT * FROM win32_computersystem") Each objItem In objSet sDummy = objItem.name
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
20
www.tobuku.com Next Set Set Set Set
objItem= Nothing objSet = Nothing objSvc = Nothing objLocator = Nothing
wscript.echo sDummy
Method yang terakhir adalah method Get dan berikut ini adalah sintaks selengkapnya. objWbemObject = SwbemService.Get( [ strObjectPath = "" ], [ iFlags = 0 ], [ objWbemNamedValueSet = null ] ) Nama Parameter
Keterangan
strObjectPath
Opsional. String yang mengandung object path dari objek yang dituju. Jika dikosongkan, sebuah objek kosong akan dikembalikan.
iFlags
Opsional. Integer yang menentukan perilaku dari query. Parameter ini dapat berisi: wbemFlagUseAmendedQualifiers 131072 0x20000
objWbemNamedValueSet
WMI akan mengembalikan data modifikasi class dengan definisi class dasar.
Opsional. Umumnya parameter ini tidak didefinisikan.
Jika pemanggilan berhasil, method ini mengembalikan sebuah objek SWbemObject. Setelah pemanggilan Get, objek Err bisa mengandung salah satu kode kesalahan dari kode-kode berikut ini. Kode Kesalahan
Keterangan
wbemErrAccessDenied 2147749891 0x80041003
User tidak memiliki akses ke objek tersebut.
wbemErrFailed 2147749889 0x80041001
Kesalahan yang tidak diketahui.
wbemErrInvalidParameter 2147749896 0x80041008
Kesalahan pada parameter yang dimasukkan.
wbemErrInvalidObjectPath 2147749946 0x8004103A
Path tidak valid.
wbemErrNotFound 2147749890 0x80041002
Objek yang diminta tidak bisa ditemukan.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
21
www.tobuku.com wbemErrOutOfMemory 2147749894 0x80041006
Memori tidak cukup.
Menggunakan Moniker Beberapa saat yang lalu Moniker telah dibahas. Pada bagian ini moniker akan dibahas lebih lanjut karena skrip-skrip di dalam artikel ini akan banyak menggunakannya, sehingga mestinya tidak ada salahnya memberikan sedikit perhatian tambahan. Moniker mempunyai bagian sebagai berikut:
Prefiks, yaitu “WinMgmts:”. Prefiks ini merupakan keharusan agar perintah koneksi WMI dikenal sebagai sebuah moniker.
Seting sekuriti, ini adalah opsional.
WMI path, ini adalah opsional.
Dengan moniker, handle dari sebuah objek WMI bisa diperoleh dengan sebaris perintah menggunakan method GetObject. Nama user dan password tidak bisa dimasukkan dalam string moniker, hal ini berarti moniker hanya bisa menggunakan mode integrated security. Jika hendak menggunakan nama user dan password selain credential yang sedang logon ke Windows atau hendak mengganti tipe otentikasi, Anda harus menggunakan method SWbemLocator.ConnectServer. Moniker berikut ini menghasilkan objek SWbemServices yang mewakili namespace root\default, dengan impersonation, opsi wbemPrivilegeDebug diaktifkan dan opsi wbemPrivilegeSecurity dinon-aktifkan. "winmgmts:{impersonationLevel=impersonate,(debug, !security)}!root\default" String moniker di atas sesuai dengan bagian-bagian yang disyaratkan, yaitu:
Prefiks: winmgmts:
Seting sekuriti: {impersonationLevel=impersonate,(debug, !security)}
WMI path: root\default
Tanda seru (“!”) di depan privilege mengindikasikan bahwa opsi tersebut dinon-aktifkan (disabled). Ketiadaan tanda seru di privilege opsi itu menyatakan bahwa opsi tersebut diaktifkan (enabled). Tanda seru di depan nama komputer atau namespace perlu digunakan sebagai pemisah dari string seting sekuriti jika seting tersebut ditambahkan di dalam moniker. Nama komputer bisa diabaikan dari path yang artinya koneksi ini diarahkan ke komputer lokal. Namespace juga bisa diabaikan yang artinya mengacu ke namespace default. Nilai default tersebut disimpan di dalam Windows registry dengan regristry key HKEY_LOCAL_MACHINE\Software\ Microsoft\WBEM\Scripting\Default Namespace. Nilai registry value untuk Windows XP dan Windows 2000 adalah root\cimv2. Teks impersonate, debug dan security pada seting sekuriti adalah nama-nama kontansta yang dikenal oleh WMI mewakili nilai-nilai tertentu. Nama-nama konstanta ini disebut string literal. Perhatikan bahwa string literal adalah case-insensitive. Penulisan dengan huruf besar, huruf kecil atau kombinasinya tidak menjadi masalah. Impersonate adalah salah satu opsi dari seting impersonation level. Opsi-opsi lainnya bisa dilihat pada tabel 1.1. Sementara itu, debug dan security adalah konstanta-konstanta dari WbemPrivilegeEnum yang merupakan opsi-opsi dari seting privilege. Opsi-opsi privilege diperlihatkan pada tabel di bawah ini.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
22
www.tobuku.com Tabel 1.3. Opsi-opsi Privilege Konstanta
Nilai
Keterangan
wbemPrivilegeCreateToken atau CreateToken wbemPrivilegePrimaryToken atau PrimaryToken
1
Digunakan untuk membuat primary token.
2
Dibutuhkan untuk diberikan pada primary token dari sebuah proses.
wbemPrivilegeLockMemory atau LockMemory
3
Dibutuhkan untuk mengunci physical page dalam memori.
wbemPrivilegeIncreaseQuota atau IncreaseQuota
4
Dibutuhkan untuk memperbesar kuota yang diberikan pada sebuah proses. assigned to a process.
wbemPrivilegeMachineAccount atau MachineAccount
5
Dibutuhkan untuk membuat sebuah machine account.
wbemPrivilegeTcb atau Tcb
6
Menetapkan pemilik privilege sebagai bagian dari trusted computer base.
wbemPrivilegeSecurity atau Security
7
Dibutuhkan untuk melakukan sejumlah operasi sekuriti seperti mengontrol dan menampilkan pesan-pesan audit. Privilege ini menetapkan pemiliknya sebagai operator sekuriti.
wbemPrivilegeTakeOwnership atau TakeOwnership
8
Dibutuhkan untuk mengambil kepemilikan sebuah objek (tapi aksesnya belum diberikan).
wbemPrivilegeLoadDriver atau LoadDriver
9
Dibutuhkan untuk menyalakan atau mematikan sebuah device driver.
wbemPrivilegeSystemProfile atau SystemProfile
10
Dibutuhkan untuk mengumpulkan informasi profil dari seluruh sistem.
wbemPrivilegeSystemtime atau Systemtime wbemPrivilegeProfileSingleProce ss atau ProfileSingleProcess wbemPrivilegeIncreaseBasePriori ty atau IncreaseBasePriority wbemPrivilegeCreatePagefile atau CreatePagefile wbemPrivilegeCreatePermanent atau CreatePermanent wbemPrivilegeBackup atau Backup wbemPrivilegeRestore atau Restore wbemPrivilegeShutdown atau Shutdown
11
Dibutuhkan untuk merubah jam sistem.
12
Dibutuhkan untuk mengumpulkan informasi profil dari sebuah proses.
13
Dibutuhkan untuk meningkatkan prioritas dasar sebuah proses.
14
Dibutuhkan untuk membuat sebuah paging file.
15
Dibutuhkan untuk membuat objek permanen.
16
Dibutuhkan untuk operasi backup.
17
Dibutuhkan untuk operasi restore.
18
Dibutuhkan untuk mematikan (shut down) sistem lokal.
wbemPrivilegeDebug atau Debug wbemPrivilegeAudit atau Audit wbemPrivilegeSystemEnvironme
19
Dibutuhkan untuk men-debug sebuah proses.
20
Dibutuhkan untuk mengisi generate audit-log.
21
Dibutuhkan untuk merubah nonvolatile RAM dari
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
23
www.tobuku.com nt atau SystemEnvironment
sistem yang menggunakan memori jenis ini untuk menyimpan informasi konfigurasi.
wbemPrivilegeChangeNotify atau ChangeNotify
22
Dibutuhkan untuk menerima pemberitahuan atas perubahan-perubahan file atau direktori.
wbemPrivilegeRemoteShutdown atau RemoteShutdown
23
Dibutuhkan untuk mematikan sistem melalui jaringan.
wbemPrivilegeUndock atau Undock
24
Dibutuhkan untuk memindahkan komputer dari dudukannya (docking station).
wbemPrivilegeSyncAgent atau SyncAgent
25
Dibutuhkan untuk menyelaraskan (synchronize) data.
wbemPrivilegeEnableDelegation atau EnableDelegation
26
Dibutuhkan untuk mengaktifkan komputer dan user account untuk delegasi trusted.
Di bawah ini diperlihatkan beberapa contoh string moniker yang valid:
Moniker ini mengarah ke namespace default pada komputer lokal. Sebuah objek SWbemServices akan dikembalikan. "WinMgmts:"
Moniker ini mengarah ke namespace default pada komputer bernama myServer. Sebuah objek SWbemServices akan dikembalikan. "WinMgmts:\\myServer"
Moniker ini mengarah ke namespace root\cimv2 pada komputer lokal. Sebuah objek SWbemServices akan dikembalikan. "WinMgmts:root\cimv2"
Moniker ini mengarah ke namespace root\cimv2 pada komputer bernama myServer. Sebuah objek SWbemServices akan dikembalikan. "WinMgmts:\\myServer\root\cimv2"
Moniker ini mengacu ke class Win32_LogicalDisk dari namespace default dalam komputer lokal. Sebuah objek SWbemObject akan dikembalikan. "WinMgmts:{impersonationLevel=impersonate}" & _ "!Win32_LogicalDisk"
Moniker ini mengacu ke class Win32_LogicalDisk dalam namespace root\cimv2 di komputer lokal. Sebuah objek SWbemObject akan dikembalikan. "WinMgmts:{impersonationLevel=impersonate}" & _ "!root\cimv2:Win32_LogicalDisk"
Moniker ini mengacu ke class Win32_LogicalDisk dalam namespace root\cimv2 di komputer myServer. Sebuah objek SWbemObject akan dikembalikan. "WinMgmts:{impersonationLevel=impersonate}" & _ "!\\myServer\root\cimv2:Win32_LogicalDisk"
Moniker ini mengacu ke objek Win32_LogicalDisk berkaitan dengan drive C: di dalam namespace default dari komputer lokal. Sebuah objek SWbemObject akan dikembalikan. "WinMgmts::Win32_LogicalDisk='C:'"
Moniker ini mengacu ke objek Win32_LogicalDisk berkaitan dengan drive C: di dalam namespace default dari komputer lokal. Sebuah objek SWbemObject akan dikembalikan.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
24
www.tobuku.com "WinMgmts:{impersonationLevel=impersonate}" & _ "!Win32_LogicalDisk="C:""
Moniker ini mengacu ke objek of Win32_LogicalDisk berkaitan dengan drive C: di dalam namespace root\cimv2 dari komputer lokal. Sebuah objek SWbemObject akan dikembalikan. "WinMgmts:{impersonationLevel=impersonate}" & _ "!root\cimv2:Win32_LogicalDisk="C:""
Moniker ini mengacu ke objek Win32_LogicalDisk berkaitan dengan drive C: dalam namespace root\cimv2 di komputer myServer. Sebuah objek SWbemObject akan dikembalikan. "WinMgmts:{impersonationLevel=impersonate}" & _ "!\\myServer\root\cimv2:Win32_LogicalDisk= "C:""
Moniker ini menetapkan impersonation level sebagai impersonate dan mengaktifkan privilege wbemPrivilegeDebug. "WinMgmts:{impersonationLevel=impersonate, (Debug)}"
Moniker ini menetapkan impersonation level sebagai impersonate dan mengaktifkan privilege wbemPrivilegeDebug dan menon-aktifkan wbemPrivilegeShutDown. "WinMgmts:{impersonate,(Debug,!Shutdown)}"
Catatan: Method GetObject tidak bisa dipanggil menggunakan VBScript dan JScript yang disisipkan pada halaman HTML (client side scripting) karena Microsoft Internet Explorer tidak mengijinkannya untuk alasan keamanan.
Menggunakan WMI SDK Software Development Kit untuk WMI adalah perangkat yang bisa digunakan para programer untuk mempermudah pekerjaannya dalam membangun aplikasi yang berhubungan dengan WMI. WMI SDK ini berisi program-program yang disebut dengan WMI Tools. Menginstal WMI Tools bukanlah suatu keharusan, tapi program-program di dalamnya bisa sangat membantu. WMI SDK bisa diperoleh dari situs: http://www.microsoft.com/downloads Program instalasinya bisa dicari dengan kata kunci “WMI Administrative Tools”. Berikut ini adalah program-program yang ada di dalam WMI Tools:
WMI Object Browser Program ini digunakan untuk melihat objek-objek di dalam CIM repository. Anda bisa merubah nilainilai property dan menjalankan beberapa method.
WMI CIM Studio Program ini digunakan untuk melihat class-class di dalam CIM repository. Anda juga bisa merubah class-class, property, instance dan menjalankan method.
WMI Event Registration Tool Program ini adalah antar muka grafis untuk mengkonfigur event consumer permanen. Dengan too ini pengguna dapat membuat atau melihat instance-instance dari event consumer, membuat filter dan binding .
WMI Event Viewer
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
25
www.tobuku.com Program ini menampilkan event event-event dari semua instance dari registered consumer. consumer Anda dapat menjalankan WMI Event Registration Tool dari WMI Event Viewer. Bersama keempat program ini, disertakan disertakan juga sebuah dokumentasi WMI Tools di dalam direktori ..\Program Files\WMI Tools\wmitools.chm wmitools.chm. Dari keempat program di atas, WMI Object Browser adalah program yang akan paling sering digunakan. Berikut ini adalah langkah-langkah langkah untuk menjalankannya. 1. Jalankan WMI Object Browser dari Start All Programs WMI Tools.
Gambar 1.8. 1. Menjalankan WMI Objeck Browser. Menu di atas akan menjalankan program IE dan membuka file BROWSER.HTM. Pada IE versi-versi versi terakhir atau jika Anda menginstal service pack terbaru dari Windows, maka pesan peringatan seperti di bawah ini akan muncul. muncul
Gambar 1.9. Pesan peringatan dari IE. Pesan san ini muncul karena halaman BROWSER.HTM mengandung sebuah komponen ActiveX. IE mendeteksi hal tersebut dan menon menon-aktifkan aktifkan aktivasinya untuk alasan keamanan. Hal ini adalah langkah pencegahan yang dilakukan Microsoft dengan menutup celah terhadap komponenkompo komponen di Internet yang berpotensial merusak sistem. Karena aksi pencegahan ini maka WMI Object Browser yang juga sebuah kontrol ActiveX batal dijalankan. Namun dengan seijin Anda , ActiveX yang bersangkutan masih dapat dijalankan. Klik bar pada window ow IE seperti yang ditunjukkan oleh gambar di bawah ini.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
26
www.tobuku.com
Klik pada bar ini
Gambar 1.10. 1. Informasi IE untuk komponen yang diblok. Dari menu popup, pilih “Allow Allow Blocked Content Content”.
Gambar 1. 1.11. Mengaktifkan komponen yang diblok. Sekali lagi sebuah window dialog akan muncul meminta konfirmasi. Jawab dengan ““Yes”.
Gambar 1.12. 1. Konfirmasi untuk menjalankan kontrol ActiveX. Window IE akan di-refresh refresh dan kali ini kontrol ActiveX akan dijalankan.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
27
www.tobuku.com 2. WMI Object Browser akan menampilkan sebuah window dialog untuk memasukkan nama namespace yang ingin dituju. Ingat proses koneksi ke WMI pada penjelasan sebelumnya? Bahwa WMI path atau nama namespace yang akan dituju harus ditetapkan.
Gambar 1.13. 1. Koneksi ke sebuah namespace. Secara default WMI Object Browser akan menuju namespace default yang tercatat di Windows registry komputer, pada contoh ini adalah root\CIMV2. root Isian itu boleh diganti untuk menuju namespace yang lain. Silakan baca kembali sub-bab sub bab 1.5 mengenai “Struktur WMI” di mana man terdapat daftar nama-nama nama namespace yang valid. Untuk saat ini, mari gunakan root root\CIMV2. Klik tombol OK. 3. Selanjutnya WMI Object Browser membuat koneksi WMI ke komputer lokal dan merujuk ke namespace yang ditetapkan pada window dialog sebelumnya. Tampilan WMI Object Browser diperlihatkan pada gambar di bawah ini. Secara default WMI Object Browser mengakses objek Win32_ComputerSystem di dalam namespace root root\CIMV2.
Gambar 1. 1.14. Objek Win32_ComputerSystem. Di area kanan dari window ini, tampak property property-property erty dari objek yang diakses (dalam contoh ini adalah objek Win32_ComputerSystem). Anda juga bisa meng-klik klik tab Methods untuk melihat method-method method di dalam objek ini. Untuk saat ini, kita hanya fokus pada property.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
28
www.tobuku.com Nama-nama nama property yang tampak pada wind window ow tersebut ditulis sama persis dengan nama-nama nama property yang ada di dalam class yang bersangkutan. Sebagai contoh, property Win32_ComputerSystem.Caption akan tampak sebagai Caption pada daftar tersebut. Bayangkan Win32_ComputerSystem.Caption betapa program ini sangat memudahkan para programer dalam menjelajah class-class class WMI. Fasilitas lainnya yang sangat berguna adalah window bantuan. Dengan men men-klik ikon bergambar tanda tanya pada sudut kiri-atas, kiri atas, WMI Object Browser akan memunculkan sebuah window berisi informasi-informasi informasi yang sangat san lengkap mengenai property-property property di dalam class tersebut.
Gambar 1.15. Window bantuan. Catatan: Keberadaan class, property dan method mungkin akan berbeda pada sistem operasi Windows yang berlainan. Sebagai contoh, Windows 2000 tidak mengenal class Win32_PingStatus dimana class tersebut ada pada Windows XP dan Windows 2003 Server. Untuk beralih ke class lain atau jika ingin melihat daftar class yang ada di dalam namespace tersebut, klik ikon bergambar teropong seperti diperlihatkan di bawah ini.
Gambar 1.16. Beralih ke class lain atau melihat daftar class.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
29
www.tobuku.com
Gambar 1.17. Daftar class. 4. Untuk beralih ke namespace lain atau jika ingin membuat koneksi ke komputer lain, klik ikon bergambar komputer seperti diperlihatkan di bawah ini.
Gambar 1. 1.18. Memilih komputer dan namespace. Jika hendak membuat koneksi ke komputer lain, Anda diminta untuk memasukkan identitas user. Jika pilihannya adalah trusted connection, beri tanda pada opsi “Login “Login as current user”. user Selain itu, jika hendak menggunakan credentia credentiall lain maka hilangkan tanda pada opsi tersebut dan isilah kolom Username dan password. password
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
30
www.tobuku.com
Gambar 1.19. 1. Membuat koneksi ke komputer lain. Kecuali Anda adalah seorang administrator jaringan atau termasuk dalam grup Administrators dalam komputer yang bersangkutan, mungkin Anda tidak dapat mengakses komputer lain karena otoritas yang terbatas. WMI SDK menuntaskan pengenalan Anda pada WMI. Bagian ini mengawali langkah Anda untuk eksplorasi lebih lanjut, mengenali class-class class WMI dan atributnya. Pada bagian-bagian berikutnya Anda akan dipandu untuk menerapkan pengetahuan-pengetahuan pengetahuan pengetahuan dasar yang baru saja diperoleh guna membuat aplikasi manajemen aset IT seperti yang diutarakan pada awal artikel ini.
WMI-FD-06011 – MENGENAL WINDOWS MANAGEMENT INSTRUMENTATION
31