Belajar PowerShell - Working with Services & Processes
Episode 15 of 31

Belajar PowerShell - Working with Services & Processes

Kendalikan yang berjalan di komputer: kelola layanan Windows dengan Get-Service dan kawan-kawan, pantau serta hentikan proses, jadwalkan pekerjaan otomatis dengan Scheduled Tasks, dan telusuri jejak sistem lewat event log dengan Get-WinEvent.

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

Pendahuluan

Di episode 14 kalian belajar mengendalikan banyak komputer lewat remoting — kekuatan untuk menjalankan perintah di mana pun. Pertanyaan berikutnya: apa saja yang perlu dikendalikan di dalam komputer tersebut? Jawabannya hampir selalu hal yang sama: layanan yang berjalan, proses yang hidup, tugas yang terjadwal, dan jejak yang ditinggalkan.

Episode ini membahas empat domain inti administrasi Windows dengan PowerShell: layanan (service) dan kontrolnya, proses (process) dan propertinya, tugas terjadwal (scheduled tasks), serta event log — membaca jejak sistem dengan cmdlet modern.

Layanan Windows: Get-Service dan Kawan-kawan

Layanan (service) adalah program yang berjalan di latar belakang tanpa antarmuka — seperti resepsionis gedung yang selalu standby. Get-Service menampilkan semua layanan beserta statusnya:

Lihat status layanan
Get-Service

Output kolom Status berisi Running, Stopped, atau StartPending. Menyaring layanan yang berjalan:

Filter layanan yang berjalan
Get-Service | Where-Object Status -eq 'Running'

Layanan ditebak dari nama, bukan display name. Gunakan parameter -DisplayName jika kalian mencari berdasarkan nama tampilan.

Mengontrol Layanan

Perintah kontrolnya sederhana: Start-Service, Stop-Service, Restart-Service, dan Set-Service.

Restart layanan web
Restart-Service -Name W3SVC
Set startup type layanan
Set-Service -Name W3SVC -StartupType Automatic

Set-Service mengubah konfigurasi layanan, bukan sekadar status. -StartupType menerima Automatic, Manual, Disabled, dan lain-lain. Menonaktifkan layanan yang tidak dipakai adalah praktik hardening yang umum.

Dependensi

Layanan tidak berdiri sendiri — yang satu bergantung pada yang lain, seperti lantai gedung yang menumpu lantai di atasnya. PowerShell menampilkan relasi ini langsung:

Layanan yang bergantung pada layanan lain
(Get-Service -Name Spooler).DependentServices

DependentServices adalah layanan yang bergantung pada layanan ini; ServicesDependedOn adalah layanan yang ia butuhkan. Sebelum menghentikan sebuah layanan, periksa dulu DependentServices agar tidak mematikan layanan lain yang tidak disadari.

Proses: Get-Process dan Kawan-kawan

Jika layanan adalah penghuni tetap gedung, proses adalah pengunjung sementara — lahir, bekerja, lalu pergi. Get-Process menampilkan proses aktif dengan properti penting:

Lihat penggunaan CPU dan memori proses
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU, WorkingSet64

CPU adalah total detik CPU yang dipakai; WorkingSet64 adalah memori fisik yang dipakai dalam byte. Untuk membaca memori dalam megabyte:

Memori dalam satuan mudah dibaca
Get-Process | Sort-Object WorkingSet64 -Descending |
    Select-Object -First 5 Name, @{n="MemoriMB"; e={[math]::Round($_.WorkingSet64/1MB)}}

Properti-properti ini menjadi dasar monitoring: skrip yang memeriksa WorkingSet64 melewati ambang tertentu bisa memicu peringatan atau restart aplikasi.

Mengontrol Proses

Membuka aplikasi
Start-Process notepad
Menghentikan proses
Stop-Process -Name notepad
Menunggu proses selesai
Wait-Process -Name installer -Timeout 60

Stop-Process bisa memakai -Name atau -Id. Wait-Process membuat skrip menunggu hingga proses selesai atau timeout — sangat berguna saat menjalankan installer yang harus selesai sebelum skrip lanjut. Start-Process juga mendukung -Wait untuk memblokir eksekusi sampai aplikasi tertutup.

Caution

Stop-Process pada proses sistem dapat membuat server tidak responsif. Proses seperti winlogon, lsass, atau layanan penting sistem operasi tidak boleh dihentikan sembarangan. Sebelum menghentikan proses, verifikasi identitasnya lewat Get-Process dan pastikan tidak sedang dipakai layanan lain.

Tugas Terjadwal: Scheduled Tasks

Tugas terjadwal adalah "asisten yang bekerja sesuai jam" — menjalankan skrip pada waktu atau peristiwa tertentu tanpa intervensi. Empat cmdlet utama: Get-ScheduledTask, New-ScheduledTask, Register-ScheduledTask, dan Unregister-ScheduledTask.

Lihat semua tugas terjadwal
Get-ScheduledTask

Membuat tugas baru melibatkan tiga bagian: action (apa yang dijalankan), trigger (kapan), dan principal (sebagai siapa):

Membuat tugas terjadwal
$action  = New-ScheduledTaskAction -Execute "powershell.exe" `
    -Argument "-File C:\Scripts\backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"
$principal = New-ScheduledTaskPrincipal -UserId "NT AUTHORITY\SYSTEM" `
    -RunLevel Highest
 
Register-ScheduledTask -TaskName "Backup Malam" `
    -Action $action -Trigger $trigger -Principal $principal

Analogi pemisahan ini seperti menulis surat perintah: action adalah isi perintahnya, trigger adalah waktu pengirimannya, principal adalah pengirimnya. Memisahkan ketiganya memudahkan kombinasi ulang — action yang sama bisa dipicu oleh waktu berbeda tanpa menulis ulang semuanya.

Untuk menjalankan dengan kredensial pengguna tertentu (bukan SYSTEM), gunakan -User dan -Password pada Register-ScheduledTask. Kredensial disimpan dalam bentuk terenkripsi oleh Task Scheduler, tapi tetap hindari menulis password plain di dalam skrip.

Event Log: Get-EventLog vs Get-WinEvent

Setiap aplikasi dan layanan meninggalkan jejak di event log — catatan harian sistem. PowerShell punya dua cmdlet:

  • Get-EventLog — cmdlet lama (legacy), mudah dibaca, tapi hanya untuk format log klasik dan sudah ditinggalkan Microsoft.
  • Get-WinEvent — cmdlet modern, mendukung log baru, jauh lebih cepat, dan wajib dipakai untuk skrip baru.
Get-WinEvent - 10 error terbaru dari System
Get-WinEvent -LogName System -MaxEvents 10 |
    Where-Object LevelDisplayName -eq 'Error'

FilterHashtable

Parameter -FilterHashtable membuat query jauh lebih efisien daripada memfilter hasil di pipeline:

Query dengan FilterHashtable
Get-WinEvent -FilterHashtable @{
    LogName   = 'Security'
    ID        = 4624
    StartTime = (Get-Date).AddDays(-1)
}

Hashtable filter dievaluasi di sisi sumber — jauh lebih cepat daripada mengambil semua event lalu menyaringnya di pipeline. Kunci umum: LogName, ID, Level, StartTime, dan EndTime.

XPath Query

Untuk query kompleks, -FilterXPath menerima ekspresi XPath — bahasa query terstruktur untuk dokumen XML. Event log pada dasarnya adalah XML, sehingga XPath bisa menyaring kombinasi kondisi:

Query XPath untuk kombinasi kondisi
$xpath = "*[System[EventID=4625 and TimeCreated[timediff(@SystemTime) <= 86400000]]]"
Get-WinEvent -LogName Security -FilterXPath $xpath -MaxEvents 5

XPath membawa query ke tingkat presisi tinggi — cocok untuk kombinasi ID event, level, dan rentang waktu dalam satu ekspresi. Untuk keperluan sehari-hari, FilterHashtable sudah cukup; XPath dibutuhkan saat kondisi gabungannya kompleks.

Selain membaca, kalian juga bisa menulis event agar jejak aktivitas skrip tercatat:

Menulis event ke Application log
$evt = New-Object System.Diagnostics.EventLog('Application')
$evt.WriteEntry("Backup selesai: 120 file", 'Information', 1001, 1)

Membaca dan menulis event membuat skrip kalian ikut tercatat dalam jejak audit sistem — kombinasi yang sangat dihargai saat investigasi insiden.

Penutup

Episode ini melengkapi kotak alat administrasi harian: layanan dengan Get-Service, Start-Service, Stop-Service, Restart-Service, dan Set-Service beserta relasi dependensi; proses dengan Get-Process, Start-Process, Stop-Process, dan Wait-Process serta properti CPU dan memori; tugas terjadwal yang disusun dari action, trigger, dan principal; serta event log yang dibaca efisien dengan Get-WinEvent dan FilterHashtable.

Poin kunci yang dibawa pulang:

  • Periksa DependentServices sebelum menghentikan layanan.
  • WorkingSet64 dan CPU adalah bahan baku monitoring proses.
  • Scheduled task = action + trigger + principal, terpisah dan bisa dikombinasi.
  • Gunakan Get-WinEvent, bukan Get-EventLog, untuk skrip baru.
  • FilterHashtable memfilter di sisi sumber — cepat dan ringkas.

Layanan dan proses adalah lapisan aplikasi; di bawahnya ada lapisan informasi sistem yang lebih dalam. Episode 16 membuka akses ke repositori data sistem itu: WMI & CIMGet-CimInstance, kelas-kelas Win32, query WQL, dan relasi antar kelas. Sampai jumpa di episode 16!

Belajar PowerShell - Working with Services & Processes | Belajar PowerShell