Bagikan melalui


FAQ tentang Remoting PowerShell

Saat Anda bekerja dari jarak jauh, Anda mengetik perintah di PowerShell pada satu komputer (dikenal sebagai "komputer lokal"), tetapi perintah berjalan di komputer lain (dikenal sebagai "komputer jarak jauh"). Pengalaman bekerja dari jarak jauh harus sebanyak mungkin seperti bekerja langsung di komputer jarak jauh.

Nota

Untuk menggunakan remoting PowerShell, komputer jarak jauh harus dikonfigurasi untuk jarak jauh. Untuk informasi lebih lanjut, lihat about_Remote_Requirements.

Haruskah kedua komputer menginstal PowerShell?

Ya. Untuk bekerja dari jarak jauh, komputer lokal dan jarak jauh harus memiliki protokol PowerShell, Microsoft .NET Framework, dan Web Services for Management (WS-Management). File apa pun dan sumber daya lain yang diperlukan untuk menjalankan perintah tertentu harus berada di komputer jarak jauh.

Komputer yang menjalankan Windows PowerShell 3.0 dan komputer yang menjalankan Windows PowerShell 2.0 dapat tersambung satu sama lain dari jarak jauh dan menjalankan perintah jarak jauh. Namun, beberapa fitur, seperti kemampuan untuk memutuskan sambungan dari sesi dan menyambungkan kembali ke sesi tersebut, hanya berfungsi ketika kedua komputer menjalankan Windows PowerShell 3.0.

Anda harus memiliki izin untuk menyambungkan ke komputer jarak jauh, izin untuk menjalankan PowerShell, dan izin untuk mengakses penyimpanan data (seperti file dan folder), dan registri pada komputer jarak jauh.

Untuk informasi lebih lanjut, lihat about_Remote_Requirements.

Bagaimana cara kerja jarak jauh?

Saat Anda mengirimkan perintah jarak jauh, perintah dikirimkan di seluruh jaringan ke mesin PowerShell di komputer jarak jauh, dan berjalan di klien PowerShell di komputer jarak jauh. Hasil perintah dikirim kembali ke komputer lokal dan muncul di sesi PowerShell di komputer lokal.

Untuk mengirimkan perintah dan menerima output, PowerShell menggunakan protokol WS-Management. Untuk informasi tentang protokol WS-Management, lihat ProtokolWS-Management dalam dokumentasi Windows.

Dimulai di Windows PowerShell 3.0, PowerShell menyimpan informasi sesi jarak jauh di komputer jarak jauh. Ini memungkinkan Anda memutuskan sambungan dari sesi dan menyambungkan kembali dari sesi lain atau komputer lain tanpa mengganggu perintah atau kehilangan status.

Apakah PowerShell jarak jauh aman?

Ketika Anda tersambung ke komputer jarak jauh, sistem menggunakan mandat nama pengguna dan kata sandi pada komputer lokal atau kredensial yang Anda sediakan dalam perintah untuk memasukkan Anda ke komputer jarak jauh. Kredensial dan sisa transmisi dienkripsi.

Untuk meningkatkan perlindungan, Anda dapat mengonfigurasi komputer jarak jauh untuk menggunakan Secure Sockets Layer (SSL) alih-alih permintaan HTTP untuk Windows Remote Management (WinRM). Kemudian, pengguna dapat menggunakan parameter UseSSL dari cmdlet Invoke-Command, New-PSSession, dan Enter-PSSession saat membuat koneksi. Opsi ini menggunakan saluran HTTPS yang lebih aman alih-alih HTTP.

Apakah semua perintah jarak jauh memerlukan remoting PowerShell?

Tidak. Beberapa cmdlet memiliki parameter ComputerName yang memungkinkan Anda mendapatkan objek dari komputer jarak jauh.

Cmdlet ini tidak menggunakan fitur remoting PowerShell. Anda dapat menggunakannya di komputer mana pun yang menjalankan PowerShell. Cmdlet berikut tidak memerlukan remote PowerShell:

  • Get-HotFix
  • Rename-Computer
  • Restart-Computer
  • Stop-Computer

Untuk menemukan semua cmdlet dengan parameter ComputerName, ketik:

Get-Help * -Parameter ComputerName
# or
Get-Command -ParameterName ComputerName

Untuk menentukan apakah parameter ComputerName cmdlet tertentu memerlukan jarak jauh PowerShell, lihat deskripsi parameter. Untuk menampilkan deskripsi parameter, ketik:

Get-Help <cmdlet-name> -Parameter ComputerName

Contohnya:

Get-Help Get-HotFix -Parameter ComputerName

Untuk semua perintah lainnya, gunakan cmdlet Invoke-Command.

Bagaimana cara menjalankan perintah pada komputer jarak jauh?

Untuk menjalankan perintah di komputer jarak jauh, gunakan cmdlet Invoke-Command. Sertakan perintah Anda dalam tanda kurung kurawal ({}). Gunakan parameter ScriptBlock dari Invoke-Command untuk menentukan perintah.

Gunakan parameter ComputerName untuk Invoke-Command menentukan komputer jarak jauh. Atau, Anda dapat membuat koneksi persisten ke komputer jarak jauh (sesi) lalu menggunakan parameter SesiInvoke-Command untuk menjalankan perintah dalam sesi.

Misalnya, perintah berikut menjalankan perintah Get-Process dari jarak jauh.

Invoke-Command -ComputerName Server01, Server02 -ScriptBlock {Get-Process}

#  - OR -

Invoke-Command -Session $s -ScriptBlock {Get-Process}

Untuk mengganggu perintah jarak jauh, ketik Ctrl+C. Permintaan gangguan diteruskan ke komputer jarak jauh, di mana ia mengakhiri perintah jarak jauh.

Untuk informasi selengkapnya tentang perintah remoting, lihat about_Remote dan Bantuan untuk cmdlet yang mendukung remoting.

Bisakah saya hanya telnet ke komputer jarak jauh?

Anda dapat menggunakan cmdlet Enter-PSSession untuk memulai sesi interaktif dengan komputer jarak jauh.

Pada perintah PowerShell, ketik:

Enter-PSSession <ComputerName>

Perintah berubah untuk menunjukkan bahwa Anda tersambung ke komputer jarak jauh.

<ComputerName>\C:>

Perintah yang Anda masukkan berjalan pada komputer jarak jauh seolah-olah Anda memasukkannya langsung di komputer jarak jauh.

Untuk mengakhiri sesi interaktif, ketik:

Exit-PSSession

Sesi interaktif adalah sesi persisten yang menggunakan protokol WS-Management. Ini tidak sama dengan menggunakan Telnet, tetapi memberikan pengalaman serupa.

Untuk informasi selengkapnya, lihat Enter-PSSession .

Bisakah saya membuat koneksi persisten?

Ya. Anda dapat menjalankan perintah jarak jauh dengan menentukan nama komputer jarak jauh, nama NetBIOS, atau alamat IP-nya. Atau, Anda dapat menjalankan perintah jarak jauh dengan menentukan sesi PowerShell (PSSession) yang tersambung ke komputer jarak jauh.

Saat Anda menggunakan parameter ComputerNameInvoke-Command atau Enter-PSSession, PowerShell membuat koneksi sementara. PowerShell menggunakan koneksi untuk menjalankan hanya perintah saat ini, lalu menutup koneksi. Perilaku ini berfungsi dengan baik untuk menjalankan satu perintah atau beberapa perintah yang tidak terkait, bahkan di banyak komputer jarak jauh.

Saat Anda menggunakan cmdlet New-PSSession untuk membuat PSSession, PowerShell membuat koneksi persisten untuk PSSession. Kemudian, Anda dapat menjalankan beberapa perintah di PSSession, termasuk perintah yang berbagi data.

Biasanya, Anda membuat PSSession untuk menjalankan serangkaian perintah terkait yang berbagi data. Jika tidak, koneksi sementara yang dibuat oleh parameter ComputerName cukup untuk sebagian besar perintah.

Untuk informasi selengkapnya tentang sesi, lihat about_PSSessions.

Dapatkah saya menjalankan perintah pada lebih dari satu komputer pada satu waktu?

Ya. Parameter ComputerName dari cmdlet Invoke-Command menerima beberapa nama komputer, dan parameter Sesi menerima beberapa PSSessions.

Saat Anda menjalankan perintah Invoke-Command, PowerShell menjalankan perintah di semua komputer yang ditentukan atau di semua PSSessions yang ditentukan.

PowerShell dapat mengelola ratusan koneksi jarak jauh bersamaan. Namun, jumlah perintah jarak jauh yang dapat Anda kirim dapat dibatasi oleh sumber daya komputer Anda dan kapasitasnya untuk membuat dan memelihara beberapa koneksi jaringan.

Untuk informasi selengkapnya, lihat contoh di Invoke-Command artikel Bantuan.

Di mana profil saya?

Profil PowerShell tidak berjalan secara otomatis dalam sesi jarak jauh, sehingga perintah yang ditambahkan profil tidak ada dalam sesi. Selain itu, variabel otomatis $PROFILE tidak diisi dalam sesi jarak jauh.

Untuk menjalankan profil dalam sesi, gunakan cmdlet Invoke-Command.

Misalnya, perintah berikut menjalankan profil CurrentUserCurrentHost dari komputer lokal dalam sesi di $s.

Invoke-Command -Session $s -FilePath $PROFILE

Perintah berikut menjalankan profil CurrentUserCurrentHost dari komputer jarak jauh dalam sesi di $s.

Invoke-Command -Session $s {
  . "$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1"
}

Setelah Anda menjalankan perintah ini, perintah yang ditambahkan profil ke sesi tersedia di $s.

Anda juga dapat menggunakan skrip startup dalam konfigurasi sesi untuk menjalankan profil di setiap sesi jarak jauh yang menggunakan konfigurasi sesi.

Untuk informasi selengkapnya tentang profil PowerShell, lihat about_Profiles. Untuk informasi selengkapnya tentang konfigurasi sesi, lihat Register-PSSessionConfiguration.

Bagaimana cara kerja pembatasan pada perintah jarak jauh?

Untuk membantu Anda mengelola sumber daya di komputer lokal Anda, PowerShell menyertakan fitur pembatasan per perintah yang memungkinkan Anda membatasi jumlah koneksi jarak jauh bersamaan yang dibuat untuk setiap perintah.

Defaultnya adalah 32 koneksi bersamaan, tetapi Anda dapat menggunakan parameter ThrottleLimit cmdlet untuk mengatur batas pembatasan kustom untuk perintah tertentu.

Fitur pembatasan berlaku untuk setiap perintah, bukan untuk seluruh sesi atau terhadap komputer. Jika Anda menjalankan perintah secara bersamaan dalam beberapa sesi atau PSSession, jumlah koneksi simultan adalah jumlah koneksi bersamaan di semua sesi.

Untuk menemukan cmdlet dengan parameter ThrottleLimit, ketik:

Get-Help * -Parameter ThrottleLimit
-or-
Get-Command -ParameterName ThrottleLimit

Apakah output perintah jarak jauh berbeda dari output lokal?

Saat Anda menggunakan PowerShell secara lokal, Anda mengirim dan menerima objek .NET Framework "langsung"; Objek "langsung" adalah objek yang terkait dengan program atau komponen sistem aktual. Saat Anda memanggil metode atau mengubah properti objek langsung, perubahan memengaruhi program atau komponen aktual. Dan, ketika properti program atau komponen berubah, properti objek yang mewakilinya juga berubah.

Namun, karena sebagian besar objek langsung tidak dapat ditransmisikan melalui jaringan, PowerShell menserialisasikan objek yang dikembalikan oleh perintah jarak jauh. Serialisasi mengonversi setiap objek menjadi elemen data Common Language Infrastructure XML (CLIXML) untuk transmisi.

Saat PowerShell menerima objek yang sudah diserialisasi, PowerShell mengonversi CLIXML menjadi jenis objek yang dideserialisasi. Objek yang dideserialisasi adalah rekaman yang akurat dari properti objek, tetapi bukan lagi objek aktif. Objek yang dideserialisasi tidak memiliki metode karena tidak lagi efektif.

Biasanya, Anda dapat menggunakan objek yang dideserialisasi sama seperti Anda akan menggunakan objek langsung, tetapi Anda harus menyadari keterbatasannya. Selain itu, objek yang dikembalikan dengan Invoke-Command memiliki properti tambahan yang membantu Anda menentukan asal perintah.

Beberapa jenis objek, seperti objek DirectoryInfo dan GUID, dikonversi kembali menjadi objek langsung saat diterima. Objek ini tidak memerlukan penanganan atau pemformatan khusus.

Untuk informasi tentang menafsirkan dan memformat output jarak jauh, lihat about_Remote_Output.

Dapatkah saya menjalankan pekerjaan latar belakang dari jarak jauh?

Ya. Pekerjaan latar belakang PowerShell adalah perintah PowerShell yang berjalan secara asinkron tanpa berinteraksi dengan sesi. Saat Anda memulai pekerjaan latar belakang, perintah akan segera kembali. Anda dapat terus bekerja dalam sesi saat pekerjaan berjalan.

Anda dapat memulai pekerjaan latar belakang bahkan saat perintah lain berjalan karena pekerjaan latar belakang selalu berjalan secara asinkron dalam sesi sementara.

Anda dapat menjalankan pekerjaan latar belakang pada komputer lokal atau jarak jauh. Secara default, pekerjaan latar belakang berjalan di komputer lokal. Namun, Anda dapat menggunakan parameter AsJob dari cmdlet Invoke-Command untuk menjalankan perintah jarak jauh apa pun sebagai pekerjaan latar belakang. Dan, Anda dapat menggunakan Invoke-Command untuk menjalankan perintah Start-Job dari jarak jauh.

Untuk informasi selengkapnya tentang pekerjaan latar belakang di PowerShell, lihat about_Jobs dan about_Remote_Jobs.

Bisakah saya menjalankan program Windows pada komputer jarak jauh?

Anda dapat menggunakan perintah jarak jauh PowerShell untuk menjalankan program berbasis Windows pada komputer jarak jauh. Misalnya, Anda dapat menjalankan Shutdown.exe atau Ipconfig.exe di komputer jarak jauh.

Namun, Anda tidak dapat menggunakan perintah PowerShell untuk membuka antarmuka pengguna untuk program apa pun di komputer jarak jauh.

Ketika Anda memulai program Windows di komputer jarak jauh, perintah PowerShell tidak kembali hingga program selesai atau sampai Anda menekan Ctrl+C untuk mengganggu perintah. Misalnya, jika Anda menjalankan ipconfig.exe program di komputer jarak jauh, perintah tidak akan kembali hingga ipconfig.exe selesai.

Jika Anda menggunakan perintah jarak jauh untuk memulai program yang memiliki antarmuka pengguna, proses program dimulai, tetapi antarmuka pengguna tidak muncul. Program ini masih berjalan. Perintah tidak kembali sampai Anda menghentikan program atau Anda menekan Ctrl+C, yang mengganggu perintah dan menghentikan proses.

Misalnya, jika Anda menggunakan perintah PowerShell untuk berjalan Notepad di komputer jarak jauh, proses Notepad dimulai di komputer jarak jauh, tetapi antarmuka pengguna Notepad tidak muncul. Untuk menginterupsi perintah dan memulihkan perintah, tekan Ctrl+C.

Bisakah saya membatasi perintah yang dapat dijalankan pengguna dari jarak jauh di komputer saya?

Ya. Setiap sesi jarak jauh harus menggunakan salah satu konfigurasi sesi pada komputer jarak jauh. Anda dapat mengelola konfigurasi sesi di komputer Anda. Anda dapat mengatur izin pada konfigurasi sesi tersebut untuk membatasi siapa yang dapat menjalankan perintah dari jarak jauh di komputer Anda. Anda juga dapat membatasi perintah mana yang dapat mereka jalankan.

Konfigurasi sesi mengonfigurasi lingkungan untuk sesi. Anda dapat menentukan konfigurasi dengan menggunakan rakitan yang mengimplementasikan kelas konfigurasi baru atau dengan menggunakan skrip yang berjalan dalam sesi. Konfigurasi dapat menentukan perintah yang tersedia dalam sesi. Dan, konfigurasi dapat mencakup pengaturan yang melindungi komputer, seperti pengaturan yang membatasi jumlah data yang dapat diterima sesi dari jarak jauh dalam satu objek atau perintah. Anda juga dapat menentukan deskriptor keamanan yang menentukan izin yang diperlukan untuk menggunakan konfigurasi.

cmdlet Enable-PSRemoting membuat konfigurasi sesi default di komputer Anda: Microsoft.PowerShell, Microsoft.PowerShell.Workflow, dan Microsoft.PowerShell32 (hanya sistem operasi 64-bit). Enable-PSRemoting mengatur pendeskripsi keamanan untuk konfigurasi agar hanya mengizinkan anggota grup Administrator di komputer Anda untuk menggunakannya.

Anda dapat menggunakan cmdlet konfigurasi sesi untuk mengedit konfigurasi sesi default, untuk membuat konfigurasi sesi baru, dan untuk mengubah deskriptor keamanan dari semua konfigurasi sesi.

Dimulai di Windows PowerShell 3.0, cmdlet New-PSSessionConfigurationFile memungkinkan Anda membuat konfigurasi sesi kustom dengan menggunakan file teks. File ini mencakup opsi untuk mengatur mode bahasa dan untuk menentukan cmdlet dan modul yang tersedia dalam sesi yang menggunakan konfigurasi sesi.

Saat pengguna menggunakan Invoke-Commandcmdlet , New-PSSession, atau Enter-PSSession , mereka dapat menggunakan parameter ConfigurationName untuk menunjukkan konfigurasi sesi yang digunakan untuk sesi tersebut. Dan, mereka dapat mengubah konfigurasi default yang digunakan sesi mereka dengan mengubah nilai variabel preferensi $PSSessionConfigurationName dalam sesi.

Untuk informasi selengkapnya tentang konfigurasi sesi, lihat Bantuan untuk cmdlet konfigurasi sesi. Untuk menemukan cmdlet konfigurasi sesi, ketik:

Get-Command *PSSessionConfiguration

Apa itu konfigurasi fan in dan fan out?

Skenario jarak jauh PowerShell yang paling umum yang melibatkan beberapa komputer adalah konfigurasi satu-ke-banyak, di mana satu komputer lokal (komputer administrator) menjalankan perintah PowerShell di banyak komputer jarak jauh. Ini dikenal sebagai skenario "fan-out".

Namun, di beberapa perusahaan, konfigurasinya banyak ke satu, di mana banyak komputer klien terhubung ke satu komputer jarak jauh yang menjalankan PowerShell, seperti server file atau kios. Ini dikenal sebagai konfigurasi "fan-in".

PowerShell remoting mendukung konfigurasi fan-out dan fan-in.

Untuk konfigurasi fan-out, PowerShell menggunakan protokol Web Services for Management (WS-Management) dan layanan WinRM yang mendukung implementasi Microsoft WS-Management. Saat komputer lokal tersambung ke komputer jarak jauh, WS-Management membuat koneksi dan menggunakan plug-in untuk PowerShell untuk memulai proses host PowerShell (Wsmprovhost.exe) di komputer jarak jauh. Pengguna dapat menentukan port alternatif, konfigurasi sesi alternatif, dan fitur lain untuk menyesuaikan koneksi jarak jauh.

Untuk mendukung konfigurasi "fan-in", PowerShell menggunakan Internet Information Services (IIS) untuk menghosting WS-Management, untuk memuat plug-in PowerShell, dan untuk memulai PowerShell. Dalam skenario ini, alih-alih memulai setiap sesi PowerShell dalam proses terpisah, semua sesi PowerShell berjalan dalam proses host yang sama.

Hosting IIS dan pengelolaan jarak jauh "fan-in" tidak didukung di Windows XP maupun Windows Server 2003.

Dalam konfigurasi fan-in, pengguna dapat menentukan URI koneksi dan titik akhir HTTP, termasuk transportasi, nama komputer, port, dan nama aplikasi. IIS meneruskan semua permintaan dengan nama aplikasi tertentu ke aplikasi. Defaultnya adalah WS-Management, yang dapat menghosting PowerShell.

Anda juga dapat menentukan mekanisme autentikasi dan melarang atau mengizinkan pengalihan dari titik akhir HTTP dan HTTPS.

Dapatkah saya menguji jarak jauh pada satu komputer tidak di domain?

Ya. Remoting PowerShell tersedia bahkan ketika komputer lokal tidak berada dalam sebuah domain. Anda dapat menggunakan fitur jarak jauh untuk menyambungkan ke sesi dan membuat sesi di komputer yang sama. Fitur berfungsi sama seperti saat Anda tersambung ke komputer jarak jauh.

Untuk menjalankan perintah jarak jauh pada komputer dalam grup kerja, ubah pengaturan Windows berikut ini pada komputer.

Perhatian: Pengaturan ini memengaruhi semua pengguna pada sistem dan mereka dapat membuat sistem lebih rentan terhadap serangan berbahaya. Berhati-hatilah saat membuat perubahan ini.

  • Windows Vista, Windows 7, Windows 8:

    Buat entri registri berikut, lalu atur nilainya ke 1: LocalAccountTokenFilterPolicy di HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

    Anda bisa menggunakan perintah PowerShell berikut untuk menambahkan entri ini:

    $parameters = @{
      Path='HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System'
      Name='LocalAccountTokenFilterPolicy'
      propertyType='DWord'
      Value=1
    }
    New-ItemProperty @parameters
    
  • Windows Server 2003, Windows Server 2008, Windows Server 2012, Windows Server 2012 R2:

    Pengaturan default Akses Jaringan: Berbagi dan model keamanan untuk kebijakan akun lokal adalah Classic. Pastikan pengaturan sudah diatur ke Classic.

Bisakah saya menjalankan perintah jarak jauh pada komputer di domain lain?

Ya. Biasanya, perintah berjalan tanpa kesalahan. Namun, Anda mungkin perlu menggunakan parameter Kredensial dengan Invoke-Command, New-PSSession, atau Enter-PSSession cmdlet. Kredensial dapat diperlukan bahkan ketika pengguna saat ini adalah anggota grup Administrator di komputer lokal dan jarak jauh.

Namun, jika komputer jarak jauh tidak berada dalam domain yang dipercaya komputer lokal, komputer jarak jauh mungkin tidak dapat mengautentikasi kredensial pengguna.

Untuk mengaktifkan autentikasi, gunakan perintah berikut untuk menambahkan komputer jarak jauh ke daftar host tepercaya untuk komputer lokal di WinRM. Ketik perintah di prompt PowerShell.

Set-Item WSMan:\localhost\Client\TrustedHosts -Value <Remote-computer-name>

Misalnya, untuk menambahkan komputer Server01 ke daftar host tepercaya di komputer lokal, ketik perintah berikut di prompt PowerShell:

Set-Item WSMan:\localhost\Client\TrustedHosts -Value Server01

Apakah PowerShell mendukung jarak jauh melalui SSH?

Ya. Untuk informasi selengkapnya, lihat PowerShell remoting melalui SSH.