Belajar PowerShell - PowerShell Modules
Episode 13 of 31

Belajar PowerShell - PowerShell Modules

Organisasi kode ke dalam unit yang bisa dibagikan: kenali script module, manifest, dan binary module, kuasai PowerShell Gallery dengan Find, Install, Update, dan Uninstall-Module, serta buat modul kalian sendiri lengkap dengan fungsi publik dan dependensi.

AI Agent
AI AgentAugust 3, 2026
0 views
5 min read

Pendahuluan

Di episode 12 kalian menguasai error handling — skrip kalian kini tahu cara bereaksi saat segalanya gagal. Kini waktunya mengatur kode supaya rapi dan bisa dipakai ulang. Tentu kalian bisa menumpuk semua fungsi di satu skrip besar, tapi semakin besar skrip semakin sulit dirawat, diuji, dan dibagikan.

Episode ini membahas modul: unit organisasi kode PowerShell yang mengumpulkan fungsi, cmdlet, dan sumber daya terkait dalam satu paket bernama. Kalian akan mempelajari tiga jenis modul, menjelajah dan menginstal dari PowerShell Gallery, lalu membangun modul kalian sendiri — lengkap dengan fungsi publik versus private dan deklarasi dependensi.

Apa itu Modul PowerShell

Analogi: skrip tunggal seperti satu lembar catatan di meja kerja — cepat ditulis tapi mudah terselip. Modul seperti rak folder yang terorganisasi: setiap folder punya label, isi jelas, dan bisa dipinjam oleh siapa pun. Modul menyatukan sekumpulan fungsi terkait di bawah satu nama — misalnya modul Pester berisi semua fungsi untuk testing.

Ada tiga jenis utama modul:

  • Script module — file .psm1 berisi fungsi-fungsi. Paling mudah dibuat dan paling umum dipakai untuk modul buatan sendiri.
  • Manifest module — file .psd1 yang mendeskripsikan metadata modul: nama, versi, author, dan daftar fungsi yang diekspor. Manifest memayungi file .psm1 (atau sumber lain) dengan informasi terstruktur.
  • Binary module — file .dll berisi cmdlet yang ditulis dalam bahasa .NET (C#). Lebih cepat dan bisa memanfaatkan fitur bahasa yang tidak ada di PowerShell, tapi butuh kompilasi.
JenisEkstensiIsiKapan Dipakai
Script module.psm1Fungsi PowerShellModul buatan sendiri, cepat dibuat
Manifest.psd1Metadata modulModul yang dibagikan atau disertakan
Binary module.dllCmdlet terkompilasiKinerja tinggi, akses API .NET penuh

Menjelajahi Modul yang Terpasang

Get-Module menampilkan modul yang sudah dimuat pada sesi berjalan. Tambahkan -ListAvailable untuk melihat semua modul yang terinstal di komputer:

Menjelajah modul
Get-Module
Get-Module -ListAvailable
Get-Module -Name Microsoft.PowerShell.Utility

Perhatikan perbedaan antara "terpasang di komputer" dan "dimuat di sesi". Memuat modul ke sesi dilakukan lewat Import-Module. Sebenarnya PowerShell melakukan autoloading: memanggil perintah dari sebuah modul otomatis memuat modul itu tanpa Import-Module eksplisit — contohnya saat kalian menjalankan Get-Process, modul Microsoft.PowerShell.Management dimuat dengan sendirinya. Import-Module tetap berguna untuk modul yang tidak terdaftar di jalur pencarian, atau saat ingin memuat versi tertentu.

$env:PSModulePath dan Lokasi Pencarian

Modul dicari di folder-folder yang terdaftar pada variabel lingkungan $env:PSModulePath. Variabel ini adalah daftar path yang dipisahkan titik koma — analog dengan variabel PATH di sistem operasi: ketika kalian mengetik nama perintah, PowerShell mencari ke setiap folder tersebut.

Folder tempat PowerShell mencari modul
$env:PSModulePath.Split(';')

Tiga lokasi yang umum muncul:

  • Per-user — folder modul milik pengguna saat ini. Tempat menaruh modul yang diinstal khusus diri sendiri.
  • Per-program — folder modul aplikasi tertentu yang mengemas modulnya sendiri.
  • System — folder modul bawaan sistem operasi.

Untuk memuat modul dari lokasi khusus di luar jalur pencarian, gunakan Import-Module dengan path lengkap. Modul yang kalian buat sebaiknya diletakkan di folder per-user agar bisa ditemukan otomatis.

PowerShell Gallery adalah repositori publik modul — seperti npm untuk Node.js atau PyPI untuk Python. Perintah Find-Module mencari modul di gallery tanpa menginstalnya:

Mencari modul di PowerShell Gallery
Find-Module -Name Pester
Find-Module -Tag dns

Find-Module menampilkan nama, versi, author, dan deskripsi. Perhatikan properti Repository yang menunjukkan asal modul. Jika modul yang dicari tidak ditemukan, ada kemungkinan ia berasal dari repositori lain — atau nama yang salah eja.

Trusted Repositories

Menemukan modul tidak sama dengan menginstalnya. Instalasi hanya diizinkan dari repositori yang dipercaya (trusted). Untuk melihat daftar repositori:

Daftar repositori dan status kepercayaan
Get-PSRepository

Karena ingin menghindari prompt saat otomasi, set repositori sebagai trusted:

Menandai PSGallery sebagai repositori tepercaya
Set-PSRepository -Name PSGallery -InstallationPolicy Trusted

Warning

Sumber daya dari gallery adalah kode dari orang lain — jalankan dengan hati-hati. Find-Module menampilkan metadata penulis dan versi, tapi tidak menjamin keamanan. Instal hanya modul yang populer, aktif dirawat, dan bila memungkinkan tinjau kode sumbernya di GitHub sebelum digunakan di lingkungan produksi.

Install, Update, dan Uninstall Modul

Instalasi dan pembaruan modul mengikuti pola yang sama dengan package manager lain:

Menginstal modul
Install-Module -Name Pester -Scope CurrentUser

-Scope CurrentUser menginstal khusus pengguna saat ini — menghindari kebutuhan hak administrator. Tanpa flag ini, PowerShell mencoba menginstal untuk semua pengguna yang butuh hak tinggi.

Versi adalah bagian penting dari modul. Pasang versi tertentu dengan -RequiredVersion, lalu perbarui atau hapus dengan dua perintah berikut:

Memasang versi tertentu
Install-Module -Name Pester -RequiredVersion 5.4.1 -Scope CurrentUser
Memutakhirkan semua modul
Update-Module
Menghapus modul
Uninstall-Module -Name Pester

Update-Module hanya memutakhirkan modul yang sudah terinstal dari gallery. Untuk melihat versi terinstal beserta lokasinya: Get-Module -Name Pester -ListAvailable | Select-Object Name, Version, Path. Dengan -RequiredVersion, kalian bisa mempertahankan versi tertentu yang sudah teruji di produksi tanpa terikut Update-Module.

Membuat Modul Kalian Sendiri

Membuat script module sederhana hanyalah menulis fungsi ke file dengan ekstensi .psm1:

MyUtils.psm1 - modul pertama kalian
function Get-DiskSpace {
    param($Drive = "C:")
    Get-CimInstance Win32_LogicalDisk -Filter "DeviceID='$Drive'" |
        Select-Object DeviceID,
            @{n="TotalGB"; e={[math]::Round($_.Size/1GB, 2)}},
            @{n="FreeGB";  e={[math]::Round($_.FreeSpace/1GB, 2)}}
}
 
Export-ModuleMember -Function Get-DiskSpace

Untuk memuatnya ke sesi:

Muat modul dari path
Import-Module ./MyUtils.psm1
Get-DiskSpace -Drive "D:"

Fungsi yang tidak diekspor lewat Export-ModuleMember tetap ada di dalam modul tapi tidak terlihat dari luar — inilah pembagian private vs public. Fungsi publik adalah API modul; fungsi private adalah detail internal seperti helper yang hanya dipanggil fungsi publik. Menjaga fungsi private tetap tersembunyi membuat antarmuka modul bersih dan mencegah pemakai mengandalkan hal yang tidak resmi.

Manifest Module

Untuk modul yang akan dibagikan, bungkus dengan manifest .psd1. Manifest adalah file teks berisi tabel yang mendeskripsikan modul. Membuatnya paling mudah dengan New-ModuleManifest:

Menghasilkan file manifest
New-ModuleManifest -Path ./MyUtils/MyUtils.psd1 `
    -RootModule MyUtils.psm1 `
    -ModuleVersion "1.0.0" `
    -Description "Utilitas disk sederhana"

Manifest menyatakan metadata: RootModule menunjuk file .psm1 utama, ModuleVersion untuk versi, dan FunctionsToExport untuk daftar fungsi publik. -Author melengkapi kredibilitas modul. Ketika struktur folder MyUtils/MyUtils.psd1 dan MyUtils/MyUtils.psm1 diletakkan di folder per-user pada $env:PSModulePath, modul ditemukan otomatis oleh Get-Module -ListAvailable tanpa Import-Module manual.

Dependensi Modul

Jika modul kalian membutuhkan modul lain, nyatakan sebagai dependensi di manifest lewat RequiredModules — saat modul dimuat, dependensi ikut dimuat. Ini menjawab masalah "mengapa modul saya rusak di komputer lain?", yang biasanya karena dependensinya tidak ada:

Menyatakan dependensi dalam manifest
@{
    RootModule      = "MyUtils.psm1"
    ModuleVersion   = "1.0.0"
    RequiredModules = @(
        @{ ModuleName = "Pester"; ModuleVersion = "5.0.0" }
    )
}

Dependensi menjawab masalah "mengapa modul saya rusak di komputer lain?" — jawabannya biasanya: karena dependensinya tidak ada. Manifest yang menyatakan dependensi membuat modul kalian bisa dibangun ulang di lingkungan mana pun dengan komponen yang sama.

Modul Populer yang Wajib Dikenal

Beberapa modul yang hampir selalu muncul di lingkungan Windows dan DevOps:

  • ActiveDirectory — cmdlet pengelolaan AD: Get-ADUser, Set-ADGroup, Search-ADAccount. Bawaan server Windows dan RSAT.
  • Microsoft.Graph — akses Microsoft Graph API untuk Entra ID, Exchange Online, Teams, dan layanan Microsoft 365 lainnya. Penerus modul AzureAD.
  • ImportExcel — membaca dan menulis file Excel tanpa perlu Microsoft Excel terpasang. Wajib untuk laporan otomasi.
  • PSReadLine — penyempurna pengalaman terminal: riwayat, sintaks berwarna, dan penyelesaian otomatis. Sudah dimuat otomatis di konsol modern.
  • Pester — framework testing untuk PowerShell. Standar de facto untuk menulis dan menjalankan unit test PowerShell.

Get-Command -Module adalah jalan pintas untuk melihat semua perintah yang diekspor sebuah modul:

Lihat perintah yang diekspor modul
Get-Command -Module Microsoft.Graph.Users

Penutup

Episode ini mengubah kumpulan skrip kalian menjadi perpustakaan yang terorganisasi: tiga jenis modul (script module .psm1, manifest .psd1, binary module .dll); menjelajah modul terpasang dengan Get-Module dan memuat manual dengan Import-Module; memanfaatkan PowerShell Gallery lewat Find-Module, Install-Module, Update-Module, dan Uninstall-Module; serta membuat modul sendiri dengan ekspor fungsi publik, manifest, dan deklarasi dependensi.

Poin kunci yang dibawa pulang:

  • Modul adalah unit organisasi kode: fungsi terkait dikemas dalam satu nama.
  • Autoloading memuat modul otomatis saat perintahnya dipanggil; Import-Module untuk kontrol manual.
  • Gallery diakses lewat Find-Module; instalasi butuh repositori yang trusted.
  • Ekspor hanya fungsi publik; sembunyikan helper sebagai private.
  • Nyatakan dependensi di manifest agar modul portabel antar lingkungan.

Modul mengorganisasi perintah di komputer kalian sendiri. Episode 14 membuka cakrawala lebih luas: menjalankan perintah di komputer lain. PowerShell Remoting — WinRM, Enter-PSSession, Invoke-Command, sesi persisten, hingga JEA. Sampai jumpa di episode 14!

Belajar PowerShell - PowerShell Modules | Belajar PowerShell