Bekerja seperti engineer: mengapa scripting memisahkan support biasa dari yang hebat, dasar PowerShell dari cmdlet hingga pipeline, variabel loop dan error handling pertama, padanan bash di Linux, bendera WhatIf penyelamat hidup, plus tiga script praktis siap pakai untuk laporan disk, audit password kadaluarsa, dan restart service massal

Setelah di episode 15 kalian merangkai proses on/offboarding yang tertib, sekarang kita belajar senjata yang mempercepat semua proses itu secara drastis: scripting. Ketika rekan kerja mengeklik satu per satu di 40 komputer, engineer sejati menulis 10 baris lalu minum kopi.
Mengapa scripting wajib bagi support? Karena pekerjaan support penuh pola berulang: cek disk puluhan PC, reset password massal saat policy berubah, audit akun pasif, pasang aplikasi standar. Setiap tugas manual yang kalian otomasi = waktu kembali untuk masalah menarik (dan reputasi naik ke atasan). Kabar baiknya: level yang dibutuhkan helpdesk tidak dalam — cukup membaca, merangkai, dan takut pada hal yang benar.
PowerShell bekerja dengan cmdlet berformat KataKerja-KataBenda (Get-Service, Stop-Process). Kekuatan utamanya adalah pipeline — output perintah menjadi input perintah berikut:
# Service yang sedang berhenti
Get-Service | Where-Object Status -eq "Stopped"
# Lima proses pemakan RAM terbesar
Get-Process | Sort-Object WS -Descending | Select-Object -First 5 Name, @{n="RAM_MB";e={[math]::Round($_.WS/1MB)}}
# Simpan hasil ke CSV untuk tiket/arsip
Get-Volume | Export-Csv "$env:USERPROFILE\Desktop\disk-report.csv" -NoTypeInformationPerhatikan $_ — artinya "objek yang sedang diproses di pipeline". Membiasakan diri membaca pipeline kiri-ke-kanan seperti kalimat adalah setengah dari kemampuan PowerShell.
$computers = @("PC-FIN-01", "PC-HRD-02", "LTV-MKT-07")
foreach ($pc in $computers) {
try {
$disk = Get-CimInstance Win32_LogicalDisk -ComputerName $pc -Filter "DeviceID='C:'"
$freeGB = [math]::Round($disk.FreeSpace / 1GB, 1)
Write-Output "$pc : sisa C: $freeGB GB"
}
catch {
Write-Warning "$pc tidak bisa dihubungi"
}
}Tiga konsep itu — variabel $x, foreach, try/catch — sudah cukup untuk 80% script support. Sisanya adalah mengetahui cmdlet mana yang tepat, dan itu datang dengan Google + pengalaman.
Di Ubuntu server/lab kalian, filosofinya sama dengan sintaks berbeda:
# Disk space semua mount point
df -h
# 5 folder terbesar di /var
du -h /var/* 2>/dev/null | sort -rh | head -5
# Loop daftar host
for pc in pc-fin-01 pc-hrd-02; do
echo "== $pc =="
ssh "$pc" 'df -h /' || echo "$pc gagal diakses"
doneKonsep transferable antar dua dunia: variabel, loop, redirect output, exit code ($?), dan kebiasaan menguji dulu di satu target sebelum massal.
Sebelum script menyentuh banyak mesin, minta PowerShell berpura-pura dulu:
Stop-Service -Name Spooler -WhatIf
Remove-Item C:\Temp\*.log -Recurse -WhatIfOutputnya menjelaskan apa yang AKAN terjadi tanpa melakukannya. Jadikan ritual: -WhatIf → baca → hapus flag → jalankan. Di bash padanannya echo perintah atau jalankan dengan nama file dummy.
Caution
Aturan keselamatan scripting: script pertama selalu versi BACA-SAJA (hanya Get-). Script pengubah (Set-, Stop-, Remove-) wajib lolos uji di satu mesin lab + flag WhatIf. Dan jangan pernah menjalankan script dari internet yang belum kalian pahami baris demi baris.
$pcs = Get-Content .\daftar-pc.txt
$hasil = foreach ($pc in $pcs) {
try {
Get-CimInstance Win32_LogicalDisk -ComputerName $pc `
-Filter "DriveType=3" |
Select-Object @{n="PC";e={$pc}}, DeviceID,
@{n="FreeGB";e={[math]::Round($_.FreeSpace/1GB,1)}}
} catch { Write-Warning "$pc offline" }
}
$hasil | Sort-Object FreeGB | Format-Table
$hasil | Export-Csv .\laporan-disk.csv -NoTypeInformationJalankan tiap Senin pagi; PC dengan sisa ruang di bawah 15 GB dikontak proaktif sebelum user panik.
Get-ADUser -Filter {Enabled -eq $true} -Properties PasswordExpired, PasswordLastSet |
Where-Object { $_.PasswordExpired -eq $true } |
Select-Object SamAccountName, PasswordLastSet |
Export-Csv .\password-expired.csv -NoTypeInformationHasilnya bisa jadi basis kampanye edukasi — atau daftar reset proaktif agar Senin tidak dibanjiri tiket login gagal.
$servers = Get-Content .\servers.txt
Invoke-Command -ComputerName $servers -ScriptBlock {
Restart-Service -Name Spooler -Force
} -ErrorAction Continue
Write-Output "Spooler direstart di $($servers.Count) mesin"Ini versi profesional dari trik spooler episode 13 — sekali jalan untuk seluruh cabang.
Script bukan mainan terpisah — ia menyatu dengan materi sebelumnya:
Batas tanggung jawab juga jelas: support menulis script operasional (laporan, restart, audit); perubahan infrastruktur besar tetap lewat change process tim senior (episode 23).
Tip
Mulai dari koleksi pribadi: satu folder scripts/ berisi tiap solusi yang pernah kalian tulis, plus komentar header (fungsi, tanggal, catatan). Dalam enam bulan folder ini adalah aset karier paling nyata milik kalian.
Inti yang harus dibawa pulang:
$_, foreach, dan try/catch — itu fondasi 80% kasus.-WhatIf sebelum eksekusi adalah budaya, bukan opsi; uji read-only dulu, lab dulu, baru produksi.Di episode 17 selanjutnya kita ubah pengetahuan menjadi aset organisasi: documentation & knowledge base — struktur KB article yang benar, SOP yang bisa diikuti orang baru, budaya self-service, cara mendokumentasikan sambil mengerjakan, dan bagaimana dokumentasi rapi membuat tim support tidur lebih tenang. Sampai jumpa!