Mengalirkan objek antargaris perintah dengan pipeline: konsep objek bukan teks, filter dengan Where-Object, pemilihan properti dengan Select-Object, pengurutan Sort-Object, pengelompokan Group-Object, agregasi Measure-Object, serta ForEach-Object paralel di PowerShell 7.

Di episode 7 kalian membangun fungsi yang menerima input dan memanggil perintah lain. Di episode 6 kalian memproses koleksi dengan ForEach-Object. Sekarang saatnya memahami apa yang membuat semuanya terhubung: pipeline. Pipeline adalah jantung PowerShell — dan seperti jantung, cara kerjanya sering disalahpahami oleh pemula.
Banyak yang mengira pipeline mengalirkan teks — salah besar. Kesalahpahaman ini yang membuat orang menulis ekspresi regex untuk memproses output yang seharusnya cukup dibaca sebagai properti objek. Episode 8 ini meluruskan: pipeline mengalirkan objek, dan objek membawa struktur yang bisa difilter, dipilih, diurutkan, dan dikelompokkan.
Ketika kalian menjalankan Get-Process, yang tampil di layar adalah tabel rapi. Tapi tabel itu hanya cetakan — di baliknya ada objek dengan properti seperti ProcessName, CPU, WS, dan method yang bisa dipanggil. Layar menampilkan representasi; pipeline membawa objek aslinya.
Get-Process pwsh | Select-Object ProcessName, Id, CPU, WS
Get-Process pwsh | Get-MemberGet-Member membongkar struktur objek: daftar properti, method, dan tipe. Inilah kunci eksplorasi — ketika bingung "properti apa yang tersedia?", Get-Member adalah jawabannya.
Pipeline merangkai perintah dengan |. Output perintah kiri menjadi input perintah kanan. Di dalam cmdlet seperti Where-Object dan ForEach-Object, variabel $_ menunjuk objek yang sedang diproses:
Get-Process |
Where-Object { $_.WS -gt 100MB } |
Sort-Object WS -Descending |
Select-Object ProcessName, Id, WSBaca seperti kalimat: "ambil semua proses, saring yang memakai lebih dari 100 MB, urutkan menurun, lalu pilih kolomnya". Setiap tahap menerima objek, memproses, dan meneruskan.
Where-Object menyaring — ia meneruskan hanya objek yang memenuhi kondisi:
Get-Service | Where-Object { $_.Status -eq "Running" }
Get-Process | Where-Object { $_.CPU -gt 10 }PowerShell 3 ke atas menyediakan simplified syntax yang lebih ringkas: properti, operator, nilai — tanpa $_ dan blok kurung:
Get-Service | Where-Object Status -eq "Running"
Get-Process | Where-Object WS -gt 100MB
Get-ChildItem /data | Where-Object Extension -in @(".log", ".txt")Simplified syntax terbaca seperti filter alami dan lebih pendek. Simpan sintaks lengkap untuk kondisi kompleks yang melibatkan ekspresi atau beberapa properti sekaligus.
Select-Object memilih properti yang diinginkan — memangkas objek menjadi "kartu identitas" yang ringkas:
Get-Process pwsh | Select-Object ProcessName, Id, WSBeberapa modifikasi yang sering dipakai:
-First, -Last, -Skip — membatasi jumlah item atau melompati sebagian.-Unique — menghilangkan duplikat.-ExpandProperty — mengambil nilai properti sebagai nilai murni, bukan objek.Get-Process | Select-Object -First 5 ProcessName, Id
Get-Process | Select-Object -ExpandProperty ProcessName
Get-Service | Select-Object -ExpandProperty Name | Select-Object -UniquePerbedaan Select-Object Name dan Select-Object -ExpandProperty Name penting: yang pertama menghasilkan objek berselimut dengan properti Name, yang kedua menghasilkan string polos. -ExpandProperty dipakai saat tahap berikutnya menginginkan nilai mentah — misalnya sebagai -Name untuk cmdlet lain.
Untuk membuat kolom baru hasil perhitungan, gunakan hashtable: nama kolom di kunci Name, ekspresi di kunci Expression:
Get-Process pwsh |
Select-Object ProcessName,
@{Name = "MemoriMB"; Expression = { [math]::Round($_.WS / 1MB, 1) }},
@{Name = "CPUIntensif"; Expression = { $_.CPU -gt 50 }}Kode ini menambahkan kolom MemoriMB dari perhitungan dan kolom CPUIntensif dari perbandingan. Hashtable seluruhnya ditulis di dalam blok kode — di luar kode, ingat konsepnya saja: Name untuk label, Expression untuk rumus.
Sort-Object mengurutkan berdasarkan satu atau beberapa properti:
Get-ChildItem /data -File | Sort-Object Length -Descending
Get-Service | Sort-Object Status, NameBanyak properti diurutkan secara berurutan: Status dulu, lalu Name untuk yang statusnya sama. -Descending membalik urutan.
Group-Object mengumpulkan objek dengan nilai properti yang sama — seperti mengelompokkan kartu berdasarkan jenisnya:
Get-Service | Group-Object Status
Get-ChildItem /data -File | Group-Object ExtensionOutputnya menampilkan Name (nilai kelompok), Count (jumlah anggota), dan Group (daftar anggota). Dari satu baris kalian tahu distribusi status service atau jenis file di sebuah folder.
Measure-Object menjumlahkan data numerik — total, rata-rata, nilai min-maks:
Get-ChildItem /data -File | Measure-Object Length -Sum -Average -Maximum -Minimum
Get-Service | Measure-ObjectTanpa properti numerik, Measure-Object menghitung jumlah item — berguna sebagai pengganti Count di dalam pipeline.
Kebanyakan pipeline memproses item satu per satu. PowerShell 7 menambahkan -Parallel: memproses banyak item secara bersamaan — seperti konveyor yang kini punya banyak jalur:
$urls = @("https://a.example", "https://b.example", "https://c.example")
$urls | ForEach-Object -Parallel {
$r = Invoke-WebRequest $_ -UseBasicParsing
Write-Output "$_ -> $($r.StatusCode)"
} -ThrottleLimit 5Dua catatan penting. Pertama, -ThrottleLimit membatasi jumlah tugas paralel agar tidak membebani sistem. Kedua, blok paralel berjalan di runspace terpisah — variabel luar tidak terlihat; kirim nilai lewat $using: jika dibutuhkan.
Warning
Paralelisme mempercepat pekerjaan yang menunggu I/O — seperti permintaan jaringan — tetapi bukan obat universal. Untuk pekerjaan yang murni komputasi, kecepatan bisa hilang karena overhead runspace. Ukur dulu: jika beban kerja menunggu jaringan atau disk, -Parallel bermanfaat; jika hanya memutar CPU, pertimbangkan urutan biasa.
Rangkai semua konsep: laporan proses paling boros memori di sistem.
Get-Process |
Where-Object { $_.WS -gt 50MB } |
Sort-Object WS -Descending |
Select-Object -First 5 ProcessName, Id,
@{Name = "MemoriMB"; Expression = { [math]::Round($_.WS / 1MB, 1) }} |
Format-Table -AutoSizeEpisode 8 menyingkap cara pipeline bekerja: objek mengalir antargaris, bukan teks; $_ menunjuk objek yang sedang diproses; Where-Object menyaring dengan sintaks lengkap maupun simplified; Select-Object memilih, membatasi, menghilangkan duplikat, memperluas properti, dan menghitung kolom baru lewat calculated properties; Sort-Object mengurutkan; Group-Object mengelompokkan; Measure-Object mengagregasi; dan ForEach-Object -Parallel mempercepat pekerjaan menunggu I/O di PowerShell 7.
Poin kunci yang dibawa pulang:
Get-Member untuk membongkar strukturnya.Where-Object menyaring, Select-Object membentuk, sisanya menata.Where-Object lebih ringkas untuk filter sederhana.-Parallel untuk beban yang menunggu I/O, dengan -ThrottleLimit sebagai rem.Pemrosesan objek adalah setengah dari kisah — objek harus datang dari suatu tempat. Di episode 9 kita mempelajari working with files & folders: membaca, menulis, menyalin, memindahkan, dan menjelajah sistem file sebagai sumber data terbesar bagi script kalian. Sampai jumpa di episode 9!