Mengelola file dan folder secara sistematis: menjelajah direktori dengan Get-ChildItem, membaca dan menulis file dengan Get-Content dan Set-Content, manipulasi jalur dengan Test-Path dan Split-Path, operasi salin pindah dan hapus, plus strategi membaca file besar dengan streaming.

Di episode 8 kalian mahir memproses objek di pipeline. Tapi dari mana objek-objek itu berasal? Salah satu sumber terbesarnya adalah sistem file — log, konfigurasi, data, dan backup. Episode 9 ini membahas pengelolaan file dan folder secara sistematis: menjelajah, membaca, menulis, menyalin, memindahkan, menghapus, dan bekerja dengan jalur path.
Anggap sistem file sebagai rak arsip raksasa. Cmdlet file adalah tangan kalian: Get-ChildItem untuk melihat isi rak, Get-Content untuk membuka berkas, Copy-Item untuk menggandakan, dan Remove-Item untuk membuang berkas yang tak terpakai. Kuasai tangannya, dan seluruh operasi arsip bisa diotomasi.
Get-ChildItem menampilkan isi direktori — setara ls di terminal lain:
Get-ChildItem /var/log
Get-ChildItem /var/log -File
Get-ChildItem /var/log -Directory-File membatasi hanya file, -Directory hanya folder. Gabungkan dengan -Recurse untuk masuk ke subfolder:
Get-ChildItem /data -Recurse -File
Get-ChildItem /data -Recurse -File -Filter "*.log"-Filter memanfaatkan pola bawaan sistem dan biasanya lebih cepat untuk pencarian sederhana. Untuk pola kompleks yang memakai ekspresi reguler, gunakan -Include dan -Exclude — dengan catatan keduanya hanya berfungsi penuh bersama -Recurse:
Get-ChildItem /data -Recurse -Include "*.log", "*.txt"
Get-ChildItem /data -Recurse -Exclude "*.tmp"Empat cmdlet inti untuk isi file:
Get-Content — membaca baris demi baris.Set-Content — menulis ulang (menimpa).Add-Content — menambahkan ke akhir.Out-File — menulis hasil perintah ke file.Get-Content /var/log/syslog
Get-Content /var/log/syslog -Tail 20
Set-Content /tmp/catatan.txt -Value "Baris pertama"
Add-Content /tmp/catatan.txt -Value "Baris kedua"
Get-Content /tmp/catatan.txt
Get-Process | Out-File /tmp/proses.txtGet-Content -Tail 20 hanya mengambil 20 baris terakhir — standar untuk memeriksa log tanpa memuat semuanya. Out-File menulis representasi teks dari objek; untuk menyimpan data terstruktur yang bisa dibaca kembali, file CSV dan JSON akan dibahas di episode 10.
Note
Perbedaan Set-Content dan Out-File: keduanya menulis teks, tapi Set-Content dirancang untuk string atau larik string, sedangkan Out-File untuk menangkap output pipeline dengan format default. Untuk mencetak log yang mudah dibaca, Out-File bersama format cmdlet seperti Format-Table adalah pasangan yang pas.
Path adalah alamat file. Empat cmdlet membuat kalian terampil mengelolanya:
| Cmdlet | Fungsi |
|---|---|
Test-Path | Mengecek apakah jalur ada |
Split-Path | Memisahkan bagian jalur (folder, nama, ekstensi) |
Join-Path | Menggabungkan folder dan nama menjadi jalur |
Resolve-Path | Mengubah jalur relatif menjadi absolut |
Test-Path /data/laporan.txt
Split-Path /data/laporan/laporan-2026.txt -Parent
Split-Path /data/laporan/laporan-2026.txt -Leaf
Join-Path /data "laporan-2026.txt"
Resolve-Path /data/laporanTest-Path adalah gerbang keamanan: sebelum membaca atau menghapus file, cek dulu keberadaannya. Split-Path -Leaf mengambil nama file, -Parent mengambil folder induk, dan Join-Path menyusun jalur dengan aman tanpa ribet soal tanda pemisah.
Lokasi kerja saat ini dikelola dengan Get-Location dan Set-Location:
Get-Location
Set-Location /data
Get-LocationGet-Item mengambil objek file atau folder itu sendiri (metadata), berbeda dengan Get-ChildItem yang menjelajah isi:
Get-Item /var/log/syslog |
Select-Object Name, Length, LastWriteTime, CreationTime, AttributesGet-ItemProperty dan Set-ItemProperty membaca dan mengubah properti — atribut seperti ReadOnly, atau tanggal:
$f = Get-Item /data/laporan.txt
$f.LastWriteTime
$f.Attributes
Set-ItemProperty /data/laporan.txt -Name IsReadOnly -Value $true
Set-ItemProperty /data/laporan.txt -Name LastWriteTime -Value (Get-Date "2026-07-01")Catatan penting: LastWriteTime dan CreationTime adalah metadata yang bisa diubah — berguna saat menormalkan tanggal file hasil restore, sekaligus alasan mengapa auditor tidak mempercayai timestamp dari satu file tunggal.
Cmdlet lengkap untuk siklus hidup file:
New-Item -Path /data/arsip -ItemType Directory
New-Item -Path /data/arsip/2026 -ItemType Directory-ItemType Directory menciptakan folder; -ItemType File menciptakan file kosong. Membuat folder bertingkat sekaligus tidak otomatis — -Force membuat seluruh rantai:
New-Item -Path /data/arsip/2026/q1 -ItemType Directory -ForceOperasi inti lainnya:
Copy-Item /data/laporan.txt /backup/laporan.txt
Copy-Item /data/arsip /backup/arsip -Recurse
Move-Item /data/laporan.txt /arsip/laporan.txt
Rename-Item /data/laporan.txt laporan-2026.txt
Remove-Item /tmp/sampah.txt
Remove-Item /tmp/sampah -Recurse -ForceCopy-Item dan Move-Item memakai -Recurse saat menyentuh folder. Remove-Item -Recurse -Force adalah pemusnah tak berampun — pastikan Test-Path sudah memeriksa target, dan biasakan menjalankan dengan -WhatIf dulu untuk melihat apa yang akan dihapus.
Warning
Remove-Item menuju Recycle Bin? Tidak — penghapusan bersifat permanen. Tidak ada undo. Sebelum menghapus folder apa pun di skrip, uji dengan -WhatIf, pertimbangkan memindahkan ke folder "sampah" dulu, atau kombinasikan dengan -Confirm untuk konfirmasi manual di titik berbahaya.
Get-Content memuat seluruh isi file ke memori. Untuk log berukuran gigabyte, itu fatal. Dua strategi menangani file besar:
Pertama, baca sebagian dengan -TotalCount atau -Tail:
Get-Content /var/log/besar.log -TotalCount 100
Get-Content /var/log/besar.log -Tail 50Kedua, streaming baris demi baris dengan -ReadCount — memproses beberapa baris sekaligus tanpa memuat semua:
Get-Content /var/log/besar.log -ReadCount 1000 | ForEach-Object {
foreach ($baris in $_) {
if ($baris -match "ERROR") { $baris }
}
}-ReadCount mengelompokkan pembacaan (di sini 1000 baris per batch) sehingga memori tetap terkendali meski file raksasa. Untuk pemrosesan baris demi baris yang lebih eksplisit, objek .NET StreamReader memberi kontrol penuh dengan ReadLine — topik yang akan muncul lagi saat membahas integrasi .NET.
Rangkuman file terbesar di sebuah folder:
$folder = "/data"
if (-not (Test-Path $folder)) {
Write-Host "Folder $folder tidak ada" -ForegroundColor Red
exit 1
}
Get-ChildItem $folder -Recurse -File |
Sort-Object Length -Descending |
Select-Object -First 5 FullName,
@{Name = "UkuranMB"; Expression = { [math]::Round($_.Length / 1MB, 2) }},
LastWriteTime |
Format-Table -AutoSizeEpisode 9 membuat kalian lihai di sistem file: menjelajah dengan Get-ChildItem dan filter seperti -Filter, -Include, -Exclude; membaca dan menulis dengan Get-Content, Set-Content, Add-Content, dan Out-File; mengelola jalur dengan Test-Path, Split-Path, Join-Path, dan Resolve-Path; membaca metadata lewat Get-Item dan properti; siklus hidup file dengan New-Item, Copy-Item, Move-Item, Rename-Item, dan Remove-Item; serta strategi streaming untuk file besar.
Poin kunci yang dibawa pulang:
Test-Path sebelum operasi berisiko — murah dan menyelamatkan.-Recurse wajib untuk folder; -WhatIf wajib untuk Remove-Item.Split-Path dan Join-Path membuat manipulasi jalur aman dan portabel.-ReadCount agar memori terkendali.File mentah sudah bisa dikelola — tapi data yang berguna jarang berbentuk teks acak. Di episode 10 kita bekerja dengan CSV & structured data: CSV, JSON, dan XML, format terstruktur yang menjadi bahasa perantara antara script kalian dan dunia luar. Sampai jumpa di episode 10!