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.

Catatan

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

Haruskah kedua komputer menginstal PowerShell?

Ya. Untuk bekerja dari jarak jauh, komputer lokal dan jarak jauh harus memiliki PowerShell, Microsoft .NET Framework, dan protokol 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 selengkapnya, 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 Protokol Manajemen WS dalam dokumentasi Windows.

Dimulai di Windows PowerShell 3.0, sesi jarak jauh disimpan 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 menambahkan perlindungan tambahan, Anda dapat mengonfigurasi komputer jarak jauh untuk menggunakan Secure Sockets Layer (SSL) alih-alih HTTP untuk mendengarkan permintaan Windows Remote Management (WinRM). Kemudian, pengguna dapat menggunakan parameter UseSSL dari Invoke-Commandcmdlet , , New-PSSessiondan 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 remoting PowerShell. Jadi, Anda dapat menggunakannya di komputer apa pun yang menjalankan PowerShell, bahkan jika komputer tidak dikonfigurasi untuk jarak jauh PowerShell atau jika komputer tidak memenuhi persyaratan untuk jarak jauh PowerShell.

Cmdlet ini mencakup yang berikut:

  • 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 Invoke-Command cmdlet .

Bagaimana cara menjalankan perintah pada komputer jarak jauh?

Untuk menjalankan perintah di komputer jarak jauh, gunakan Invoke-Command cmdlet.

Sertakan perintah Anda dalam kurung kurawal ({}) untuk menjadikannya blok skrip. Gunakan parameter ScriptBlock dari Invoke-Command untuk menentukan perintah.

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

Misalnya, perintah berikut menjalankan Get-Process perintah 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 jarak jauh, lihat about_Remote dan topik Bantuan untuk cmdlet yang mendukung jarak jauh.

Bisakah saya hanya telnet ke komputer jarak jauh?

Anda dapat menggunakan Enter-PSSession cmdlet 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:>

Sekarang, perintah yang Anda ketik berjalan di komputer jarak jauh seolah-olah Anda mengetikkannya 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 ComputerName dari Invoke-Command atau Enter-PSSession, PowerShell membuat koneksi sementara. PowerShell menggunakan koneksi untuk menjalankan hanya perintah saat ini, lalu menutup koneksi. Ini adalah metode yang sangat efisien untuk menjalankan satu perintah atau beberapa perintah yang tidak terkait, bahkan di banyak komputer jarak jauh.

Saat Anda menggunakan New-PSSession cmdlet 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 cmdlet Invoke-Command menerima beberapa nama komputer, dan parameter Sesi menerima beberapa PSSessions.

Saat Anda menjalankan Invoke-Command perintah, 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 mungkin dibatasi oleh sumber daya komputer Anda dan kapasitasnya untuk membuat dan memelihara beberapa koneksi jaringan.

Untuk informasi selengkapnya, lihat contoh dalam Invoke-Command topik Bantuan.

Di mana profil saya?

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

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

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. $profile Karena variabel tidak diisi, perintah menggunakan jalur eksplisit ke profil.

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

Setelah 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 dari cmdlet untuk mengatur batas pembatasan kustom untuk perintah tertentu.

Saat Anda menggunakan fitur pembatasan, ingatlah bahwa fitur tersebut diterapkan ke setiap perintah, bukan ke seluruh sesi atau ke komputer. Jika Anda menjalankan perintah secara bersamaan dalam beberapa sesi atau PSSessions, jumlah koneksi bersamaan 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" sebagian besar objek yang dikirim dalam perintah jarak jauh, yaitu, objek mengonversi setiap objek menjadi serangkaian elemen data XML (Bahasa Batasan dalam XML [CLiXML]) untuk transmisi.

Saat PowerShell menerima objek berseri, PowerShell mengonversi XML menjadi jenis objek yang dideserialisasi. Objek yang dideserialisasi adalah rekaman yang akurat dari properti program atau komponen pada waktu sebelumnya, tetapi tidak lagi "hidup", yaitu, itu tidak lagi terkait langsung dengan komponen. Dan, metode dihapus 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 oleh Invoke-Command cmdlet 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, prompt perintah segera kembali, dan Anda dapat terus bekerja dalam sesi saat pekerjaan berjalan bahkan jika berjalan untuk jangka waktu yang lama.

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 cmdlet Invoke-Command untuk menjalankan perintah jarak jauh apa pun sebagai pekerjaan latar belakang. Dan, Anda dapat menggunakan Invoke-Command untuk menjalankan Start-Job perintah 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 pada komputer jarak jauh, perintah tidak selesai, dan perintah PowerShell tidak kembali, sampai 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. Perintah PowerShell tidak selesai, dan perintah tidak kembali sampai Anda menghentikan proses program atau sampai 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 mengganggu 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 (dan izin untuk konfigurasi sesi tersebut) untuk menentukan siapa yang dapat menjalankan perintah dari jarak jauh di komputer Anda dan 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.

Enable-PSRemoting Cmdlet 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 pada 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, New-PSSessionConfigurationFile cmdlet 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. Dan, mereka dapat mengubah konfigurasi default yang digunakan sesi mereka dengan mengubah nilai $PSSessionConfigurationName variabel preferensi 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. Ketika 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 manajemen jarak jauh fan-in tidak didukung di Windows XP atau di 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. Jarak jauh PowerShell tersedia bahkan ketika komputer lokal tidak berada di 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:

    Tidak ada perubahan yang diperlukan karena pengaturan default kebijakan "Akses Jaringan: Berbagi dan model keamanan untuk akun lokal" adalah "Klasik". Verifikasi pengaturan jika telah berubah.

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

Ya. Biasanya, perintah berjalan tanpa kesalahan, meskipun Anda mungkin perlu menggunakan parameter Kredensial cmdlet Invoke-Command, , New-PSSessionatau Enter-PSSession untuk memberikan kredensial anggota grup Administrator di komputer jarak jauh. Ini kadang-kadang 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 jarak jauh melalui SSH.