6Sep

Geek School: Belajar Menggunakan Remoting di PowerShell

Salah satu fitur terbaik yang ditawarkan PowerShell adalah kemampuan untuk mengelola Server secara jarak jauh. Ini bahkan memungkinkan Anda mengelola sekumpulan mereka sekaligus juga.

Pastikan untuk membaca artikel sebelumnya dalam seri:

  • Pelajari Cara Mengotomatiskan Windows dengan PowerShell
  • Belajar Menggunakan Cmdlet di PowerShell
  • Belajar Cara Menggunakan Objek di PowerShell
  • Mempelajari Format, Penyaringan dan Pembandingan di PowerShell

Dan tetap mengikutisisa seri sepanjang minggu.

Apa itu Remoting?

Pengelolaan massal server Anda bisa menjadi membosankan, dan jika Anda harus membuat konfigurasi IIS pada 50 server web sebelumnya, Anda akan tahu apa yang saya maksud. Ini adalah jenis situasi saat PowerShell Remoting dan kemampuan skrip bahasa bisa sampai pada penyelamatan. Menggunakan HTTP atau HTTPS yang lebih aman, PowerShell Remoting memungkinkan Anda mengirim perintah ke mesin remote pada jaringan Anda. Mesin kemudian menjalankan perintah dan mengirimkan hasilnya kembali kepada Anda, yang pada gilirannya ditampilkan di layar Anda.

Let's Get Technical

Pada inti Remoting PowerShell terletak satu Layanan Windows, Windows Remote Management, atau layanan WinRM, seperti yang telah diketahui. Menggunakan WinRM, Anda dapat mengatur satu atau beberapa konfigurasi sesi( juga dikenal sebagai titik akhir), yang pada dasarnya adalah file yang berisi informasi tentang pengalaman yang ingin Anda berikan kepada orang yang terhubung ke instance PowerShell jarak jauh Anda. Lebih khusus lagi, Anda dapat menggunakan file konfigurasi sesi untuk menentukan siapa yang dapat dan siapa yang tidak dapat terhubung ke instance, cmdlet dan skrip apa yang dapat mereka jalankan, serta konteks keamanan apa sesi harus dijalankan. Dengan menggunakan Layanan WinRM, Anda juga mengatur "pendengar", yang mendengarkan permintaan PowerShell yang masuk."Pendengar" ini bisa berupa HTTP atau HTTPS dan bisa diikat ke satu alamat IP di komputer Anda. Saat Anda membuka koneksi PowerShell ke komputer lain( secara teknis hal ini dilakukan dengan menggunakan protokol WS-MAN, yang berbasis pada HTTP), koneksi terhubung dengan salah satu dari "pendengar" ini."Pendengar" kemudian bertanggung jawab untuk mengirimkan lalu lintas ke aplikasi yang terkait dengan file konfigurasi sesi yang sesuai;aplikasi( biasanya PowerShell tapi Anda bisa memiliki aplikasi hosting lain jika Anda mau) kemudian menjalankan perintah dan memberi hasilnya kembali melalui "pendengar" di seluruh jaringan dan kembali ke komputer Anda.

Tunjukkan kepada Saya Bagaimana

Hal pertama yang perlu Anda lakukan adalah mengaktifkan Remoting on the Machine yang ingin Anda hubungkan. Ini bisa dilakukan dengan menjalankan berikut ini:

Enable-PSRemoting

Anda perlu menjawab ya untuk semua perintahnya. Saat Anda menjalankan Enable-PSRemoting, beberapa perubahan dilakukan pada PC Anda:

  • Layanan WinRM dinyalakan.
  • Layanan WinRM berubah dari mode Start up manual menjadi Automatic.
  • Ini menciptakan pendengar HTTP yang terikat ke semua kartu jaringan Anda.
  • Ini juga menciptakan pengecualian inbound firewall untuk protokol WS-MAN.
  • Beberapa konfigurasi sesi default dibuat

Jika Anda menjalankan Windows 7 dan lokasi kartu jaringan Anda diatur ke Publik, memungkinkan Remoting PowerShell akan gagal. Untuk memperbaikinya, cukup beralih ke lokasi jaringan Rumah atau Kantor. Sebagai alternatif, Anda dapat melewati pemeriksaan jaringan dengan menggunakan yang berikut ini:

Enable-PSRemoting -SkipNetworkProfileCheck

Namun, sebaiknya Anda mengganti lokasi jaringan Anda.

Ada dua cara untuk menghubungkan ke komputer lain menggunakan PowerShell. Ada satu ke satu metode, yang sangat mirip dengan menggunakan SSH, dan kemudian ada satu ke banyak metode.

Menggunakan Sesi PowerShell

Cara pertama menghubungkan ke mesin remote menggunakan PowerShell menggunakan sesuatu yang disebut Sesi PowerShell. Sederhananya sesi memungkinkan Anda menjalankan perintah pada mesin remote secara interaktif hampir sama dengan mesin Anda sendiri. Untuk membuka sesi cukup ketik yang berikut ini:

Enter-PSSession -ComputerName "Darlah"

Prompt akan mendapatkan awalan yang menandakan mesin yang Anda gunakan pada cmdlets.

Dari sini Anda dapat benar-benar memperlakukan prompt seolah-olah Anda sedang duduk di mesin remote. Misalnya, jika Anda ingin melihat semua file di C: \ drive Anda dapat melakukan yang sederhana:

Get-ChildItem -Path C: \

Jika Anda berasal dari latar belakang Linux, Anda dapat memikirkan cara menggunakan metode ini satu kali untuk Remoting sebagai alternatif PowerShell untuk SSH.

Menggunakan Invoke-Command

Cara kedua Anda bisa menggunakan PowerShell di mesin remote adalah dengan menggunakan Invoke-Command. Keuntungan menggunakan Invoke-Command berasal dari kenyataan bahwa Anda dapat menjalankan perintah yang sama pada beberapa mesin secara bersamaan. Seperti yang dapat Anda bayangkan, ini sangat berguna saat Anda ingin melakukan sesuatu seperti mengumpulkan log peristiwa dari server Anda. Invoke-Command mengikuti sintaks berikut:

Invoke-Command -ComputerName Darlah, localhost -ScriptBlock{ Aplikasi Get-EventLog -Newest 2}

Karena perintah dijalankan secara paralel di semua mesin, Anda memerlukan beberapa cara untuk melihat PC mana yangHasil yang diberikan berasal. Anda bisa melakukan ini dengan melihat properti PSComputerName.

Bila Anda menggunakan Invoke-Command, Anda tidak lagi memiliki objek yang mungkin Anda harapkan di Pipeline. Anda tahu, agar PowerShell mendapatkan informasi dari mesin remote itu kembali ke mesin Anda, mereka memerlukan beberapa cara untuk mewakili benda-benda yang menjadi komando yang Anda jalankan pada keluaran mesin jarak jauh. Hari-hari ini tampaknya cara yang dipilih untuk mewakili struktur data hirarkis adalah dengan menggunakan XML, yang berarti ketika Anda mengeluarkan perintah menggunakan Invoke-Command, hasilnya pertama-tama disambung ke XML sebelum dikirim kembali ke mesin Anda. Begitu mereka kembali ke mesin Anda, mereka dipecat kembali menjadi objek;yang gotcha di sini adalah bahwa ketika mereka deserialized, semua metode, kecuali metode ToString() , bahwa objek telah dilucuti darinya.

Catatan: Ada beberapa pengecualian untuk aturan ini, misalnya jenis yang paling primitif seperti bilangan bulat dapat didesignisasi dengan metode yang disertakan. Ada juga proses yang disebut Rehidrasi dimana beberapa metode dapat ditambahkan kembali ke objek deserialized. Jadi hati-hati dan ingat Get-Member adalah teman anda.

Homework

  • Baca Rahasia PowerShell Remoting ebook oleh Don Jones.