Membuat script PowerShell mengambil keputusan: struktur if, elseif, dan else, penggunaan operator perbandingan dalam kondisi, konsep nilai kebenaran dan $null, pernyataan switch dengan wildcard dan regex, serta fitur modern ternary dan null-coalescing di PowerShell 7, ditutup latihan praktis memeriksa status service.

Di episode 4 kalian mengenal operator perbandingan dan logika — sekarang saatnya menggunakannya untuk hal yang paling penting: membuat keputusan. Sebuah script yang selalu menjalankan baris yang sama tanpa melihat keadaan hanyalah daftar tugas. Script yang berguna adalah script yang menyesuaikan diri — "kalau service mati, hidupkan; kalau sudah jalan, laporkan saja".
Episode 5 ini mengajarkan struktur keputusan: if, elseif, else, dan switch. Ini adalah otak dari hampir semua logic script di dunia nyata — dari validasi input, pengecekan status, hingga routing dalam fungsi yang kompleks.
Bentuk paling sederhana adalah if dengan satu kondisi:
$suhu = 39
if ($suhu -gt 37) {
Write-Host "Demam terdeteksi"
}Kondisi di dalam tanda kurung dievaluasi menjadi $true atau $false. Jika $true, blok di dalam kurung kurawal dijalankan. Untuk dua kemungkinan, tambahkan else:
$suhu = 36
if ($suhu -gt 37) {
Write-Host "Demam terdeteksi"
} else {
Write-Host "Suhu normal"
}Dan untuk lebih dari dua cabang, rangkai elseif:
$skor = 85
if ($skor -ge 90) {
Write-Host "Nilai A"
} elseif ($skor -ge 80) {
Write-Host "Nilai B"
} elseif ($skor -ge 70) {
Write-Host "Nilai C"
} else {
Write-Host "Nilai D"
}Perhatikan urutan evaluasi: PowerShell memeriksa if terlebih dahulu, lalu elseif dari atas ke bawah, dan berhenti di cabang pertama yang cocok. Urutan kondisi menentukan hasil, jadi susun dari kondisi paling spesifik.
Gabungkan if dengan operator yang kalian pelajari di episode 4. Contoh umum — pengecekan wildcard dan regex:
$server = "web-01"
if ($server -like "web-*") {
Write-Host "Server web terdeteksi"
}
$namaFile = "invoice_2026.pdf"
if ($namaFile -match "_2026") {
Write-Host "File tahun 2026"
}Ingat: perbandingan string tidak peka huruf besar/kecil secara default, dan hasil -match bisa mempengaruhi variabel otomatis $matches — akan dibahas dalam di episode regular expressions.
Setiap nilai di PowerShell dapat dinilai sebagai benar atau salah. Beberapa nilai dianggap salah (falsy):
| Nilai | Hasil Evaluasi |
|---|---|
$false | salah |
$null | salah |
0 | salah |
| String kosong | salah |
| Array kosong | salah |
Segala sesuatu yang lain — angka bukan nol, string berisi teks, array berisi item — dianggap benar. Ini memungkinkan penulisan yang ringkas:
$hasil = Get-Command pwsh -ErrorAction SilentlyContinue
if ($hasil) {
Write-Host "PowerShell 7 terpasang"
}
$nama = ""
if ($nama) {
Write-Host "Nama terisi: $nama"
} else {
Write-Host "Nama kosong"
}Cek $null secara eksplisit adalah kebiasaan yang disarankan saat membaca hasil perintah yang mungkin tidak mengembalikan apa pun — mencegah error "Membaca properti null" yang paling sering menimpa pemula.
Ketika kalian membandingkan satu nilai dengan banyak kemungkinan, rantai elseif menjadi panjang dan berulang. switch menggantikannya dengan tabel cabang yang jauh lebih terbaca:
$hari = "senin"
switch ($hari) {
"senin" { Write-Host "Mulai kerja mingguan" }
"jumat" { Write-Host "Hampir akhir pekan" }
"sabtu" { Write-Host "Libur" }
"minggu" { Write-Host "Libur" }
default { Write-Host "Hari kerja biasa" }
}switch bahkan bisa menerima array — memproses setiap elemen satu per satu — dan mendukung pencocokan wildcard atau regex dengan flag:
$files = @("report.pdf", "image.png", "script.ps1")
switch -Wildcard ($files) {
"*.pdf" { Write-Host "$_ dokumen PDF" }
"*.png" { Write-Host "$_ gambar" }
"*.ps1" { Write-Host "$_ script PowerShell" }
default { Write-Host "$_ tipe lain" }
}| Flag switch | Fungsi |
|---|---|
-Wildcard | Cocokkan dengan pola * |
-Regex | Cocokkan dengan regular expression |
-CaseSensitive | Pencocokan peka huruf besar/kecil |
default | Cabang untuk nilai yang tidak cocok |
PowerShell 7 memperkenalkan dua permen sintaks dari bahasa modern: ternary operator dan null-coalescing.
Ternary adalah if/else satu baris — cocok untuk memilih nilai, bukan untuk alur panjang:
$usia = 20
$status = ($usia -ge 17) ? "Dewasa" : "Anak-anak"
Write-Host $statusNull-coalescing ?? menyediakan nilai cadangan saat hasilnya $null — sempurna untuk nilai default:
$nama = $null
$tampilan = $nama ?? "Pengguna tanpa nama"
Write-Host $tampilanBandingkan dengan cara lama yang bertele-tele: memeriksa $nama kosong lalu menetapkan nilai default dalam beberapa baris. ?? menuliskan niat dalam satu baris. Gunakan keduanya dengan hemat — untuk pengambilan nilai singkat, bukan untuk logika yang rumit.
Gabungkan semuanya: script yang memeriksa status sebuah service dan mengambil tindakan. Simpan sebagai cek-service.ps1 dan jalankan dengan pwsh ./cek-service.ps1:
$service = "Spooler"
$info = Get-Service -Name $service -ErrorAction SilentlyContinue
if (-not $info) {
Write-Host "Service $service tidak ditemukan." -ForegroundColor Red
exit 1
}
switch ($info.Status) {
"Running" { Write-Host "Service $service sehat." -ForegroundColor Green }
"Stopped" {
Write-Host "Service $service mati. Mencoba menyalakan..."
Start-Service -Name $service
$baru = Get-Service -Name $service
if ($baru.Status -eq "Running") {
Write-Host "Berhasil dinyalakan." -ForegroundColor Green
} else {
Write-Host "Gagal menyalakan." -ForegroundColor Red
}
}
default { Write-Host "Status tak terduga: $($info.Status)" -ForegroundColor Yellow }
}Script ini memakai semua konsep episode ini sekaligus: cek $null (service tidak ada), if untuk keputusan, switch untuk status, dan tindakan berdasarkan keadaan. Catat pola $($info.Status) di dalam string — sintaks ini menyisipkan properti objek ke dalam interpolasi, alat kecil yang akan kalian pakai terus.
Warning
Saat menguji script yang memulai atau menghentikan service, jalankan dengan hak yang cukup — beberapa service menuntut console administrator. Dan mulai sekarang biasakan menulis script ke file (.ps1) lalu menjalankannya, bukan sekadar menyalin perintah ke console, agar pekerjaan kalian tersimpan dan bisa diulang.
Episode 5 ini mengajarkan otak script: if, elseif, dan else untuk keputusan bertingkat, operator perbandingan sebagai bahan kondisi, konsep nilai kebenaran dan $null yang sering menjadi sumber bug, switch untuk percabangan bersih yang bisa mencocokkan array, wildcard, dan regex, serta ternary dan null-coalescing untuk pilihan nilai yang ringkas di PowerShell 7.
Inti yang harus kalian bawa:
if dievaluasi dari atas ke bawah; urutan cabang menentukan hasil.$null, 0, dan string kosong bernilai salah — cek $null secara eksplisit saat membaca hasil perintah.switch lebih terbaca daripada rantai elseif untuk banyak cabang.? : dan null-coalescing ?? adalah permen sintaks PowerShell 7 untuk pilihan nilai singkat.cek-service.ps1.Di episode 6 selanjutnya kita belajar loops & iteration — foreach, for, while, dan do — bagaimana memproses koleksi data secara massal, mengulang hingga kondisi terpenuhi, dan menghindari infinite loop. Materi keputusan di episode ini akan menjadi pasangan sempurna untuk materi perulangan berikutnya. Sampai jumpa di episode 6!