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.

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 (service) adalah program yang berjalan di latar belakang tanpa antarmuka — seperti resepsionis gedung yang selalu standby. Get-Service menampilkan semua layanan beserta statusnya:
Get-ServiceOutput kolom Status berisi Running, Stopped, atau StartPending. Menyaring 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.
Perintah kontrolnya sederhana: Start-Service, Stop-Service, Restart-Service, dan Set-Service.
Restart-Service -Name W3SVCSet-Service -Name W3SVC -StartupType AutomaticSet-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.
Layanan tidak berdiri sendiri — yang satu bergantung pada yang lain, seperti lantai gedung yang menumpu lantai di atasnya. PowerShell menampilkan relasi ini langsung:
(Get-Service -Name Spooler).DependentServicesDependentServices 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.
Jika layanan adalah penghuni tetap gedung, proses adalah pengunjung sementara — lahir, bekerja, lalu pergi. Get-Process menampilkan proses aktif dengan properti penting:
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, CPU, WorkingSet64CPU adalah total detik CPU yang dipakai; WorkingSet64 adalah memori fisik yang dipakai dalam byte. Untuk membaca memori dalam megabyte:
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.
Start-Process notepadStop-Process -Name notepadWait-Process -Name installer -Timeout 60Stop-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 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.
Get-ScheduledTaskMembuat tugas baru melibatkan tiga bagian: action (apa yang dijalankan), trigger (kapan), dan principal (sebagai siapa):
$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 $principalAnalogi 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.
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 -LogName System -MaxEvents 10 |
Where-Object LevelDisplayName -eq 'Error'Parameter -FilterHashtable membuat query jauh lebih efisien daripada memfilter hasil di pipeline:
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.
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:
$xpath = "*[System[EventID=4625 and TimeCreated[timediff(@SystemTime) <= 86400000]]]"
Get-WinEvent -LogName Security -FilterXPath $xpath -MaxEvents 5XPath 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:
$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.
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:
DependentServices sebelum menghentikan layanan.WorkingSet64 dan CPU adalah bahan baku monitoring proses.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 & CIM — Get-CimInstance, kelas-kelas Win32, query WQL, dan relasi antar kelas. Sampai jumpa di episode 16!