Belajar PowerShell - WMI & CIM
Episode 16 of 31

Belajar PowerShell - WMI & CIM

Buka repositori informasi sistem: bedakan Get-WmiObject lawas dengan Get-CimInstance modern, jelajahi kelas-kelas Win32, filter dengan WQL, kelola CIM session untuk akses remote, dan telusuri relasi antar kelas dengan asosiasi CIM.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 15 kalian mengelola layanan, proses, dan event log — hal-hal yang tampak di permukaan sistem. Tapi di mana data tersebut bersumber? Windows menyimpan informasi terstruktur tentang hampir semua hal: perangkat keras, sistem operasi, jaringan, hingga proses. Akses ke repositori data inilah topik episode ini.

Episode 16 membahas WMI & CIM: perbedaan Get-WmiObject lawas dengan Get-CimInstance modern, menjelajah kelas-kelas WMI yang paling berguna, menyaring data dengan WQL, mengelola CIM session untuk akses remote yang efisien, serta menelusuri relasi antar kelas dengan asosiasi CIM.

WMI vs CIM

WMI (Windows Management Instrumentation) adalah teknologi Windows untuk mengambil informasi dan melakukan tindakan terhadap sistem — basis data terstruktur berisi perangkat keras, sistem operasi, proses, dan lainnya. Akses modern ke repositori ini menggunakan CIM (Common Information Model) melalui cmdlet generasi baru: Get-CimInstance.

Perbedaan kunci:

  • Get-WmiObject — cmdlet legacy yang bergantung pada WMI berbasis DCOM. Masih berfungsi, tapi lambat dan bergantung pada stack lama. Di PowerShell 7, Get-WmiObject bahkan sudah dihapus.
  • Get-CimInstance — cmdlet modern berbasis WinRM. Lebih cepat, aman, dan bisa berjalan lintas platform.
Satu kelas yang sama, dua cmdlet
Get-WmiObject Win32_OperatingSystem
Get-CimInstance Win32_OperatingSystem

Keduanya menampilkan objek yang sama — hanya transport dan performanya yang berbeda. Aturan praktis: gunakan Get-CimInstance, bukan Get-WmiObject, untuk semua skrip baru.

Menjelajahi Kelas WMI

Kelas WMI adalah "template tabel" di dalam repositori — Win32_Process adalah tabel proses, Win32_Service tabel layanan, dan seterusnya. Melihat daftar kelas:

Daftar semua kelas Win32
Get-CimClass -ClassName Win32_*

Setiap kelas punya properti dan method. Menjelajahi properti satu kelas:

Lihat properti kelas
(Get-CimClass -ClassName Win32_OperatingSystem).CimClassProperties.Name

Mengambil data dari sebuah kelas semudah menyebut namanya:

Ambil semua instance kelas
Get-CimInstance Win32_OperatingSystem

Get-CimInstance menerima nama kelas sebagai argumen pertama. Outputnya adalah objek dengan properti terstruktur — siap diproses pipeline seperti objek lain yang sudah kalian kenal.

Kelas yang Paling Sering Dipakai

Beberapa kelas WMI yang akan kalian temui hampir setiap hari:

KelasIsiContoh Penggunaan
Win32_ComputerSystemInformasi komputerNama, pabrikan, total memori
Win32_OperatingSystemInformasi sistem operasiVersi, build, uptime
Win32_LogicalDiskDrive dan logical diskKapasitas, sisa ruang
Win32_ProcessProses berjalanNama, path, penggunaan memori
Win32_ServiceLayanan WindowsStatus, startup type
Win32_NetworkAdapterAdapter jaringanStatus, MAC address

Contoh praktis — mengambil informasi sistem operasi beserta uptime:

Informasi OS dengan properti pilihan
Get-CimInstance Win32_OperatingSystem |
    Select-Object Caption, Version, LastBootUpTime,
        @{n="UptimeHari"; e={[math]::Round(((Get-Date)-$_.LastBootUpTime).TotalDays,1)}}

Memeriksa sisa ruang disk:

Cek kapasitas dan sisa disk
Get-CimInstance Win32_LogicalDisk -Filter "DriveType=3" |
    Select-Object DeviceID,
        @{n="TotalGB"; e={[math]::Round($_.Size/1GB,2)}},
        @{n="FreeGB";  e={[math]::Round($_.FreeSpace/1GB,2)}}

Filter dan WQL

Mengambil semua instance lalu memfilter di pipeline itu boros. Gunakan parameter -Filter agar penyaringan dilakukan di sisi sumber:

Filter di sisi sumber
Get-CimInstance Win32_Process -Filter "Name='notepad.exe'"

-Filter menerima ekspresi WQL (WMI Query Language) — dialek SQL khusus WMI. Membandingkan dengan pencarian pola:

Memfilter proses dengan pola
Get-CimInstance Win32_Process -Filter "Name LIKE 'sql%'"

WQL mendukung operator umum: =, <>, LIKE dengan wildcard, dan AND/OR untuk kombinasi. Ingat aturan penulisan WQL: string diapit kutip tunggal, dan wildcard % dipakai untuk pola — bukan *.

Kombinasi kondisi WQL
Get-CimInstance Win32_Service -Filter "State='Running' AND StartMode='Auto'"

CIM Session

Seperti halnya remoting di episode 14, kalian bisa membuat CIM session — koneksi persistent ke komputer remote yang dipakai berulang kali. Dua keuntungan penting: komunikasi berbasis WinRM (bukan DCOM), dan satu koneksi bisa dipakai untuk banyak query.

Membuat dan memakai CIM session
$cimSession = New-CimSession -ComputerName server-web-01
Get-CimInstance -CimSession $cimSession -ClassName Win32_OperatingSystem
Get-CimInstance -CimSession $cimSession -ClassName Win32_Process
Remove-CimSession -CimSession $cimSession

New-CimSession memakai WinRM, jadi target harus punya remoting diaktifkan. Setelah selesai, selalu Remove-CimSession — sesi yang tidak ditutup menggantung koneksi di target. Ini pola yang sama dengan New-PSSession dari episode 14.

Get-CimInstance juga punya parameter -ComputerName untuk query sekali jalan tanpa sesi. Untuk beberapa query ke komputer yang sama, -CimSession jauh lebih efisien karena koneksinya dipakai ulang.

Relasi Antar Kelas: Get-CimAssociatedInstance

Kelas WMI tidak berdiri sendiri — mereka saling terhubung. Contoh: Win32_Process terhubung dengan Win32_Service (layanan mana yang menjalankan proses mana). Relasi ini disebut association, dan CIM menyediakan cmdlet khusus untuk menelusurinya:

Cari proses yang melayani sebuah layanan
$service = Get-CimInstance Win32_Service -Filter "Name='W3SVC'"
Get-CimAssociatedInstance -InputObject $service

Hasilnya adalah instance kelas lain yang berasosiasi dengan layanan tersebut — misalnya proses yang menjalankan layanan. Menelusuri asosiasi ini memungkinkan investigasi lintas tabel: dari layanan ke proses, dari proses ke akun, dan seterusnya. Semua relasi ini ada karena kelas WMI didefinisikan dengan meta-model — itulah kekuatan CIM: bukan sekadar kumpulan tabel, melainkan grafik data yang saling terhubung.

Tip

Gunakan Get-CimAssociatedInstance untuk membangun peta hubungan: layanan mana yang dipicu oleh proses mana, atau perangkat mana yang dipakai oleh suatu sesi. Investigasi masalah sistem sering dimulai dari satu instance, lalu mengikuti asosiasinya — seperti mengikuti jejak dari satu ruangan ke ruangan lain di gedung yang sama.

Penutup

Episode ini membuka pintu ke repositori informasi sistem: perbedaan Get-WmiObject legacy dengan Get-CimInstance modern; menjelajah kelas WMI dan propertinya; menguasai kelas-kelas penting seperti Win32_OperatingSystem, Win32_LogicalDisk, dan Win32_Process; menyaring data dengan -Filter dan WQL; mengelola CIM session untuk akses remote yang efisien; serta menelusuri relasi antar kelas dengan Get-CimAssociatedInstance.

Poin kunci yang dibawa pulang:

  • Gunakan Get-CimInstance, bukan Get-WmiObject, untuk semua skrip baru.
  • Get-CimClass untuk menjelajah struktur kelas dan propertinya.
  • Filter di sisi sumber dengan WQL, bukan di pipeline.
  • New-CimSession untuk query berulang ke komputer yang sama; jangan lupa Remove-CimSession.
  • Asosiasi CIM menghubungkan kelas — ikuti jejaknya untuk investigasi.

CIM memberi kalian data terstruktur dari dalam sistem. Episode 17 membuka pintu yang lebih luas lagi: berinteraksi dengan aplikasi dan framework di luar PowerShell — COM Objects & .NET Integration — mengotomasi Excel, memanggil metode .NET, hingga menyuntikkan kode C# sendiri. Sampai jumpa di episode 17!

Belajar PowerShell - WMI & CIM | Belajar PowerShell