Pemrograman · Bahasa pemrograman
Tutorial PowerShell untuk pemula
Jawaban singkat
PowerShell adalah shell dan bahasa scripting lintas platform dari Microsoft untuk otomatisasi. Perintahnya, yang disebut cmdlet, meneruskan objek .NET melalui pipeline alih-alih teks biasa, sehingga Anda bisa memfilter, mengurutkan, dan mengekspor data tanpa parsing. Halaman ini membahas instalasi PowerShell 7, menjalankan skrip, cmdlet, variabel, operator, alur kontrol, fungsi, koleksi, dan penanganan error.
Buka Penguji regexApa itu PowerShell dan untuk apa digunakan
PowerShell adalah shell dan bahasa scripting lintas platform dari Microsoft, dibangun di atas .NET. Berbeda dari shell tradisional yang meneruskan teks biasa antarperintah, PowerShell meneruskan objek .NET lengkap dengan properti dan method, sehingga Anda bisa memfilter dan mengurutkan data tanpa mengurai teks.
System administrator dan DevOps engineer memakai PowerShell untuk mengotomatisasi Windows, mengelola Active Directory, Microsoft 365, dan Azure, serta menulis skrip build dan deployment. Ada dua edisi: Windows PowerShell 5.1 yang bawaan Windows, dan PowerShell 7 ke atas (nama perintah pwsh) yang open source dan berjalan di Windows, Linux, dan macOS. Tutorial ini menargetkan PowerShell 7.
Instal PowerShell dan jalankan Hello, world
Di Windows, instal PowerShell 7 dengan winget install --id Microsoft.PowerShell --source winget; di macOS dan Linux, gunakan Homebrew atau package manager yang dijelaskan di panduan instalasi Microsoft. Skrip adalah file teks berekstensi .ps1.
# hello.ps1
Write-Output "Hello, world!"pwsh ./hello.ps1
# Hello, world!Di Windows, execution policy bisa memblokir skrip. Set-ExecutionPolicy -Scope CurrentUser RemoteSigned mengizinkan skrip lokal milik Anda sendiri sementara skrip hasil unduhan tetap harus ditandatangani. Visual Studio Code dengan ekstensi PowerShell adalah editor yang direkomendasikan.
Cmdlet dan pipeline
Perintah disebut cmdlet dan mengikuti pola penamaan Verb-Noun, seperti Get-Process, Set-Location, atau New-Item. Tiga cmdlet membantu Anda menjelajahi hal lainnya: Get-Command, Get-Help, dan Get-Member.
Get-Command -Noun Process # list commands that work with processes
Get-Help Get-ChildItem -Examples # show usage examples
# five processes using the most memory
Get-Process |
Sort-Object -Property WorkingSet64 -Descending |
Select-Object -First 5 -Property Name, Id, WorkingSet64
# files larger than 1 MB in the current folder
Get-ChildItem -File | Where-Object { $_.Length -gt 1MB } |
ForEach-Object { "{0} {1:N0} KB" -f $_.Name, ($_.Length / 1KB) }
Get-Date | Get-Member -MemberType Property # inspect an objectDi dalam script block, $_ (atau $PSItem) adalah objek saat ini di pipeline. Karena objek mempertahankan tipenya, Sort-Object mengurutkan angka secara numerik dan tanggal secara kronologis tanpa usaha tambahan.
Variabel dan tipe
Variabel diawali $. Variabel bisa menampung objek .NET apa pun, dan Anda bisa menambahkan batasan tipe dalam kurung siku. String bertanda kutip ganda meng-expand variabel dan ekspresi $( ); string bertanda kutip tunggal bersifat literal.
$name = "Ada"
[int]$count = 3
$price = 19.99 # System.Double
$isAdmin = $false
$today = Get-Date
"Hello, $name" # Hello, Ada
"Next: $($count + 1)" # Next: 4
'No $expansion here' # No $expansion here
$price.GetType().Name # Double
$today.ToString("yyyy-MM-dd") # for example 2026-10-31
[int]"42" + 1 # 43 (explicit conversion)| Tipe | Contoh | Catatan |
|---|---|---|
[int] | 42 | bilangan bulat 32-bit |
[double] | 3.14 | floating point; [decimal] untuk uang |
[string] | "text" | perbandingan tidak peka huruf besar-kecil secara default |
[bool] | $true, $false | variabel otomatis, bukan keyword |
[datetime] | Get-Date | objek .NET DateTime lengkap |
[array], [hashtable] | @(1, 2), @{ a = 1 } | koleksi, dibahas di bawah |
Operator dan alur kontrol
Operator perbandingan berupa kata, bukan simbol: -eq, -ne, -gt, -lt, -ge, -le, -like (wildcard), -match (regular expression), dan -contains. Perbandingan string tidak peka huruf besar-kecil kecuali Anda memakai versi c seperti -ceq.
$temp = 22
if ($temp -gt 30) {
"hot"
} elseif ($temp -ge 15) {
"mild" # mild
} else {
"cold"
}
switch ("report.csv") {
{ $_ -like "*.csv" } { "CSV file" } # CSV file
{ $_ -like "*.txt" } { "text file" }
default { "other" }
}
foreach ($n in 1..3) { "n = $n" } # n = 1, n = 2, n = 3
for ($i = 0; $i -lt 2; $i++) { "i = $i" } # i = 0, i = 1
$k = 3
while ($k -gt 0) { $k-- }
"Hello" -eq "hello" # TrueFungsi dan parameter
Fungsi memakai blok param() untuk mendeklarasikan parameter bernama dengan tipe. Menambahkan [CmdletBinding()] memberi fungsi common parameter yang sama dengan cmdlet bawaan, seperti -Verbose. Output apa pun yang tidak ditangkap menjadi nilai kembalian fungsi.
function Get-Greeting {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$Name,
[string]$Greeting = "Hello"
)
Write-Verbose "Building greeting for $Name"
"$Greeting, $Name!"
}
Get-Greeting -Name "Ann" # Hello, Ann!
Get-Greeting -Name "Bo" -Greeting "Hi" # Hi, Bo!
Get-Greeting "Cy" -Verbose # also prints the verbose messagePanggil fungsi seperti cmdlet, dengan spasi di antara argumen: Get-Greeting -Name Ann. Menulis Get-Greeting("Ann", "Hi") meneruskan satu argumen berupa array, kejutan yang sering dialami orang dari bahasa lain.
Array, hashtable, dan objek kustom
Array dibuat dengan @( ) atau daftar yang dipisahkan koma. Hashtable, ditulis @{ }, menyimpan pasangan key-value. [pscustomobject] mengubah hashtable menjadi objek yang bekerja baik dengan Sort-Object, Format-Table, dan Export-Csv.
$langs = @("PowerShell", "Python")
$langs += "Go" # creates a new, longer array
$langs.Count # 3
$langs[0] # PowerShell
$langs -contains "Go" # True
$ports = @{ http = 80; https = 443 }
$ports["ssh"] = 22
$ports.https # 443
$ports.Keys.Count # 3
$user = [pscustomobject]@{ Name = "Ann"; Age = 31 }
$user.Name # Ann
$people = @(
[pscustomobject]@{ Name = "Bo"; Age = 25 }
$user
)
$people | Sort-Object Age | Format-TableMenambah ke array dengan += menyalin seluruh array setiap kali. Untuk loop besar, kumpulkan output loop secara langsung ($result = foreach (...) { ... }) atau pakai [System.Collections.Generic.List[object]].
Penanganan error
PowerShell punya terminating error, yang menghentikan eksekusi, dan non-terminating error, yang mencetak pesan lalu melanjutkan. try/catch/finally hanya menangkap terminating error, jadi tambahkan -ErrorAction Stop pada cmdlet saat Anda ingin menangkap kegagalannya.
try {
$content = Get-Content -Path "missing.txt" -ErrorAction Stop
}
catch [System.Management.Automation.ItemNotFoundException] {
Write-Warning "File not found: $($_.Exception.Message)"
}
catch {
Write-Error "Unexpected error: $_"
}
finally {
"cleanup done"
}
$ErrorActionPreference = "Stop" # make all errors terminating in this script
throw "Something went wrong" # raise your own terminating errorDi dalam catch, $_ adalah error record. Mengatur $ErrorActionPreference = "Stop" di bagian atas skrip adalah cara umum untuk fail fast.
Skrip lengkap kecil: laporan penggunaan disk
Skrip ini mendaftar file terbesar di bawah sebuah folder, mengelompokkannya menurut ekstensi, dan mengekspor laporan CSV. Skrip ini memadukan parameter, pipeline, calculated property, dan penanganan error.
# report.ps1
param(
[string]$Path = ".",
[int]$Top = 5
)
$ErrorActionPreference = "Stop"
$files = Get-ChildItem -Path $Path -File -Recurse
"Largest $Top files:"
$files | Sort-Object Length -Descending | Select-Object -First $Top |
Format-Table Name, @{ Name = "SizeKB"; Expression = { [math]::Round($_.Length / 1KB, 1) } }
$byExt = $files | Group-Object Extension | ForEach-Object {
[pscustomobject]@{
Extension = if ($_.Name) { $_.Name } else { "(none)" }
Files = $_.Count
TotalMB = [math]::Round(($_.Group | Measure-Object Length -Sum).Sum / 1MB, 2)
}
} | Sort-Object TotalMB -Descending
$byExt | Format-Table
$byExt | Export-Csv -Path "usage.csv" -NoTypeInformation
"Report saved to usage.csv"pwsh ./report.ps1 -Path ~/Documents -Top 3Langkah selanjutnya
- PowerShell 101 dan dokumentasi PowerShell di Microsoft Learn.
Get-Help about_*di shell, misalnyaGet-Help about_Operators; jalankanUpdate-Helpterlebih dahulu.- PowerShell Gallery, repositori resmi modul, yang dipakai bersama
Install-Module. - PSScriptAnalyzer, linter yang memeriksa skrip terhadap praktik yang direkomendasikan.
FAQ
Apa perbedaan PowerShell dan Windows PowerShell?
Windows PowerShell 5.1 adalah edisi lama bawaan Windows dan berbasis .NET Framework. PowerShell 7 ke atas adalah edisi lintas platform dan open source berbasis .NET modern, dijalankan dengan perintah pwsh.
Apakah PowerShell sama dengan Command Prompt?
Tidak. Command Prompt (cmd.exe) menjalankan perintah batch dan meneruskan teks. PowerShell adalah bahasa scripting lengkap yang meneruskan objek, meskipun masih bisa menjalankan sebagian besar program command line.
Bisakah PowerShell berjalan di Linux dan macOS?
Bisa. PowerShell 7 ke atas berjalan di Windows, Linux, dan macOS, meskipun beberapa modul khusus Windows hanya tersedia di Windows.
Mengapa skrip .ps1 saya tidak bisa dijalankan?
Execution policy di Windows mungkin memblokirnya. Jalankan Set-ExecutionPolicy -Scope CurrentUser RemoteSigned, dan mulai skrip dengan path, seperti ./script.ps1.
Apa arti $_ di PowerShell?
$_ (juga $PSItem) adalah objek saat ini di pipeline, dipakai di dalam script block untuk cmdlet seperti Where-Object dan ForEach-Object, dan merupakan error saat ini di dalam catch.