Kelola banyak komputer dari satu tempat: pahami WinRM dan TrustedHosts, masuk interaktif dengan Enter-PSSession, jalankan perintah massal dengan Invoke-Command dan eksekusi paralel, manfaatkan sesi persisten, amankan dengan autentikasi dan JEA, serta remoting lintas platform lewat SSH.

Di episode 13 kalian merapikan perintah ke dalam modul — kode terorganisasi, tetapi masih terbatas pada satu komputer. Dunia nyata tidak seperti itu: seorang administrator mengelola puluhan server, dan menyalakan RDP satu per satu lalu mengetik perintah berulang kali adalah pemborosan waktu yang tidak bisa dibenarkan.
Episode ini membahas PowerShell Remoting: menjalankan perintah di komputer lain seolah-olah kalian duduk di depannya. Kalian akan belajar dasar WinRM, sesi interaktif Enter-PSSession, eksekusi massal Invoke-Command dengan paralelisme, sesi persisten, keamanan autentikasi dan JEA, hingga remoting berbasis SSH yang lintas platform.
Remoting di Windows menggunakan WinRM (Windows Remote Management), implementasi protokol WSMan. Secara sederhana: komputer kalian mengirim permintaan berbasis web service ke komputer target, dan target mengeksekusinya. Pengaktifan dilakukan sekali di komputer target, sebagai administrator:
Enable-PSRemoting -ForceEnable-PSRemoting mengatur layanan WinRM, membuka firewall, dan membuat endpoint sesi default. Setelah aktif, uji koneksi dengan Test-WSMan:
Test-WSMan -ComputerName server-web-01Output menunjukkan versi protokol dan produk. Jika gagal, penyebabnya biasanya firewall, layanan WinRM mati, atau konfigurasi TrustedHosts yang akan dibahas berikutnya.
WinRM tidak menerima kredensial dari komputer mana pun. Di lingkungan workgroup (bukan domain), target harus mendaftarkan komputer pengirim di daftar TrustedHosts:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "server-web-01" -ForceTrustedHosts adalah daftar nama atau IP yang diizinkan. Nilai * berarti mempercayai semua komputer — jangan pernah dipakai di lingkungan nyata. Di domain yang memakai Kerberos, TrustedHosts biasanya tidak perlu diubah karena autentikasi sudah terpercaya.
Enter-PSSession membuka shell interaktif di komputer remote — seperti "RDP untuk baris perintah": prompt berubah dan setiap perintah yang kalian ketik dijalankan di komputer target.
Enter-PSSession -ComputerName server-web-01Setelah masuk, prompt berubah menjadi [server-web-01]: PS C:\>. Semua perintah berjalan di server tersebut. Keluar dengan:
Exit-PSSessionEnter-PSSession nyaman untuk menjelajah dan debugging manual. Untuk otomasi — menjalankan perintah dari skrip — gunakan Invoke-Command.
Invoke-Command menjalankan blok skrip (script block) di satu atau banyak komputer sekaligus dan mengumpulkan hasilnya. Inilah alat utama otomasi remote.
Invoke-Command -ComputerName server-web-01, server-web-02 -ScriptBlock {
Get-Service -Name W3SVC | Select-Object Status, Name
}Hasil setiap komputer diberi label PSComputerName sehingga kalian tahu hasil mana milik server mana. Analogi: Enter-PSSession seperti mengunjungi satu toko dan bertanya langsung; Invoke-Command seperti mengirimkan kuesioner ke banyak toko sekaligus dan membaca semua jawaban dalam satu tumpukan.
Pola penting: variabel lokal dibawa ke remote lewat -ArgumentList — variabel di dalam blok skrip diinterpretasikan di sisi target, bukan di komputer kalian.
$service = "W3SVC"
Invoke-Command -ComputerName server-web-01 -ArgumentList $service -ScriptBlock {
param($serviceName)
Restart-Service -Name $serviceName
}Menjalankan perintah ke 50 server satu per satu sangat lambat. -ThrottleLimit mengendalikan berapa banyak koneksi bersamaan. PowerShell 7 menambah parameter -Parallel untuk menjalankan blok skrip secara paralel dalam satu ForEach-Object:
$servers = Get-Content ./servers.txt
$servers | ForEach-Object -Parallel {
Test-WSMan -ComputerName $_ | Select-Object ProductVersion
} -ThrottleLimit 10-ThrottleLimit 10 membatasi koneksi bersamaan agar tidak membanjiri jaringan. Paralel bukan berarti tak terbatas — kelola dengan throttle sesuai kapasitas infrastruktur kalian.
Setiap kali Invoke-Command selesai, sesi remote ditutup. Untuk pekerjaan yang butuh state — memuat modul, membangun konfigurasi di target, lalu memakainya lagi — buat persistent session dengan New-PSSession. Sesi bertahan dan bisa dipakai ulang.
$session = New-PSSession -ComputerName server-web-01
Invoke-Command -Session $session -ScriptBlock { $PSVersionTable.PSVersion }
Get-PSSession
Remove-PSSession -Session $sessionAlur hidupnya: buat dengan New-PSSession (sekali, mahal), pakai berulang kali dengan -Session, periksa yang masih aktif dengan Get-PSSession, lalu bersihkan dengan Remove-PSSession agar tidak menggantung resource di target. Sesi yang lupa dihapus akan menumpuk — periksa rutin dengan Get-PSSession dan bersihkan yang tidak terpakai.
Import-PSSession mengambil daftar perintah dari sesi remote dan membuat versi lokalnya — seolah-olah cmdlet remote berjalan langsung di komputer kalian. Ini disebut implicit remoting, dan sangat berguna untuk modul yang hanya ada di server.
$session = New-PSSession -ComputerName dc-01
Import-PSSession -Session $session -Module ActiveDirectory
Get-ADUser -Identity arman
Remove-PSSession -Session $sessionSetelah Import-PSSession, Get-ADUser tersedia secara lokal meski modul ActiveDirectory tidak terpasang di komputer kalian. Di balik layar, setiap pemanggilan diteruskan ke sesi remote. Hati-hati: perintah hasil import bersifat sementara dan terhapus setelah sesi ditutup.
Default WinRM menciptakan endpoint sesi yang memberi akses penuh PowerShell. Untuk lingkungan produksi, batasi dengan session configuration — endpoint khusus dengan aturannya sendiri:
Register-PSSessionConfiguration -Name LimitedShell `
-SessionType RestrictedRemoteServer -ForceRestrictedRemoteServer membuat shell yang sangat dibatasi: hanya beberapa perintah inti, tanpa akses ke fungsi berbahaya. Endpoint yang lebih canggih disebut JEA (Just Enough Administration) — konsep memberikan hak sesedikit mungkin: user non-admin diberi peran yang hanya menjalankan perintah tertentu. JEA membutuhkan file konfigurasi peran dan endpoint yang memetakan peran ke group.
Note
JEA adalah puncak praktik keamanan remoting: bukan "user boleh masuk dan melakukan segalanya", melainkan "user hanya boleh melakukan apa yang diizinkan perannya". Ketika audit menuntut siapa melakukan apa di server produksi, JEA adalah jawabannya.
WinRM mendukung beberapa skema autentikasi. Default Kerberos di domain dan Negotiate di workgroup. Untuk kredensial alternatif gunakan -Credential:
$cred = Get-Credential
Invoke-Command -ComputerName server-web-01 -Credential $cred -ScriptBlock { Get-Date }CredSSP memungkinkan delegasi kredensial ke lapisan kedua — dibutuhkan saat remote memanggil remote lain. Namun CredSSP mengirim kredensial ke server yang bisa disalahgunakan jika server dikompromikan. Gunakan hanya bila perlu dan hindari di jaringan tidak tepercaya. Alternatif yang lebih aman adalah autentikasi sertifikat — sertifikat X.509 menggantikan password. Untuk transport, HTTPS mengenkripsi seluruh komunikasi; setup-nya membutuhkan sertifikat di komputer target dan layanan WinRM yang dikonfigurasi dengan port 5986.
Important
Autentikasi dasar (Basic) mengirim kredensial hampir plaintext. Hanya gunakan bersama HTTPS — dan lebih baik lagi, hindari sama sekali demi autentikasi Kerberos atau sertifikat. Mengirim password tanpa enkripsi di jaringan adalah undangan bagi pencurian kredensial.
Mulai PowerShell 7, remoting juga berjalan di atas SSH — protokol yang sama yang digunakan Linux. Keuntungannya: cross-platform (Windows, Linux, macOS) dan tidak butuh WinRM. Konsepnya sama: Enter-PSSession atau Invoke-Command dengan parameter -HostName dan -UserName.
Enter-PSSession -HostName ubuntu-dev-01 -UserName armanInvoke-Command -HostName ubuntu-dev-01 -UserName arman -ScriptBlock { uname -a }Syaratnya: kedua mesin punya SSH aktif, dan PowerShell dipasang di mesin remote. Sesi SSH tidak mendukung semua fitur WinRM (misalnya sesi persisten lewat -Session), jadi pilih transport sesuai kebutuhan: WinRM untuk Windows-to-Windows dengan fitur penuh, SSH untuk lintas platform.
Episode ini mengubah satu kursi administrator menjadi kontrol pusat: memahami WinRM dan WSMan sebagai fondasi, mengaktifkan remoting dan mengelola TrustedHosts, menjelajah interaktif dengan Enter-PSSession, menjalankan perintah massal dengan Invoke-Command dan eksekusi paralel, memakai sesi persisten New-PSSession plus implicit remoting, mengamankan dengan autentikasi yang tepat dan JEA, hingga remoting berbasis SSH yang lintas platform.
Poin kunci yang dibawa pulang:
Enable-PSRemoting menyiapkan target; Test-WSMan memverifikasi koneksi.Enter-PSSession untuk interaktif; Invoke-Command untuk otomasi massal.-ArgumentList; -ThrottleLimit untuk paralelisme.Remove-PSSession.Remoting memberi kalian kendali atas banyak komputer. Episode 15 mengalihkan fokus pada apa yang berjalan di dalam komputer tersebut: Working with Services & Processes — mengelola layanan, proses, tugas terjadwal, dan membaca event log. Sampai jumpa di episode 15!