Peluncuran jarak jauh Powershell. Memperkenalkan Remote Control di PowerShell – Hai, Pembuat Skrip! blog

Peluncuran jarak jauh Powershell.  Memperkenalkan Remote Control di PowerShell – Hai, Pembuat Skrip!  blog
Peluncuran jarak jauh Powershell. Memperkenalkan Remote Control di PowerShell – Hai, Pembuat Skrip! blog

Melanjutkan: Mengenal kendali jarak jauh di Windows PowerShell.

Weekend Scripter: Mengaktifkan kendali jarak jauh Windows.

Orang Pembuat Skrip Microsoft, Ed Wilson ada di sini. Hari ini saya akan menerbitkan kutipan dari buku baru saya, Windows PowerShell 3.0 Langkah demi Langkah, yang diterbitkan oleh Microsoft Press. Buku ini sekarang tersedia untuk pre-order.

WinRM – Manajemen Jarak Jauh Windows

DI DALAM Server Windows WinRM 2012 berjalan secara default untuk mendukung eksekusi jarak jauh perintah Windows PowerShell. WinRM adalah implementasi Microsoft terhadap protokol Manajemen WS standar industri. Oleh karena itu WinRM menyediakan cara yang nyaman akses ke sistem jarak jauh dalam hal persyaratan konfigurasi firewall. Ini adalah mekanisme yang digunakan cmdlet CIM baru. Dengan cara ini, Anda dapat menyambung ke mesin Windows Server 2012 yang sedang berjalan kapan saja untuk menjalankan perintah atau membuka konsol Windows PowerShell interaktif. Sebaliknya, pada Windows 8, WinRM dinonaktifkan secara default. Artinya, hal pertama yang perlu Anda lakukan adalah menjalankan cmdlet Aktifkan-PSRemoting. Saat Anda menjalankan cmdlet ini, langkah-langkah berikut ini terjadi:

1. Layanan WinRM dimulai atau dimulai ulang.

2. Jenis startup layanan WinRM diatur ke otomatis.

3. Listener dibuat untuk menerima koneksi ke semua alamat IP.

4. Pengecualian firewall untuk lalu lintas WS-Man diaktifkan.

5. Konfigurasi Microsoft.powershell diaktifkan

6. Konfigurasi Microsoft.powershell.workflow diaktifkan

7. Konfigurasi Microsoft.powershell32 diaktifkan

Selama proses ini, fungsi meminta konfirmasi untuk setiap tindakan. Jika Anda sudah familiar dengan fungsi tersebut dan tidak ingin membuat perubahan apa pun pada cara kerjanya, Anda dapat menjalankan perintah ini dengan sakelar -Memaksa Dalam hal ini, perintah konfirmasi tidak akan ditampilkan. Sintaks untuk perintah ini diberikan di bawah ini.

Aktifkan-PSRemoting –Paksa

Berikut ini contoh penggunaan fungsi Enable-PSRemoting secara interaktif, termasuk semua informasi keluarannya.

PS C:\>Aktifkan-PSRemoting

Konfigurasi Cepat WinRM

Menjalankan perintah "Set-WSManQuickConfig" untuk mengaktifkan manajemen jarak jauh komputer ini dengan menggunakan jendela Layanan Manajemen Jarak Jauh (WinRM). Ini termasuk:

1. Memulai atau memulai ulang (jika sudah dimulai) layanan WinRM

2. Mengatur jenis startup layanan WinRM ke Otomatis

3. Membuat pendengar untuk menerima permintaan pada alamat IP apa pun

4. Mengaktifkan pengecualian aturan masuk Windows Firewall untuk lalu lintas Manajemen WS (hanya untuk http).

Apakah Anda ingin melanjutkan?

WinRM telah diperbarui untuk menerima permintaan.

Jenis layanan WinRM berhasil diubah.

Layanan WinRM dimulai.

WinRM telah diperbarui untuk manajemen jarak jauh.

Membuat pendengar WinRM di HTTP://* untuk menerima permintaan WS-Man ke IP apa pun di mesin ini.

Pengecualian firewall WinRM diaktifkan.

microsoft.powershell SDDL:

[Y] Ya [A] Ya untuk Semua [N] Tidak [L] Tidak untuk Semua [S] Tangguhkan [?] Bantuan (defaultnya adalah “Y”):y

Apakah Anda yakin ingin melakukan tindakan ini?

Melakukan operasi "Set-PSSessionConfiguration" pada Target "Nama:

microsoft.powershell.alur kerja SDDL:

O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;; WD). Ini akan

memungkinkan pengguna terpilih menjalankan perintah Windows PowerShell dari jarak jauh di komputer ini."

[Y] Ya [A] Ya untuk Semua [N] Tidak [L] Tidak untuk Semua [S] Tangguhkan [?] Bantuan (defaultnya adalah “Y”):y

Apakah Anda yakin ingin melakukan tindakan ini?

Melakukan operasi "Set-PSSessionConfiguration" pada Target "Nama:

microsoft.powershell32 SDDL:

O:NSG:BAD:P(A;;GA;;;BA)(A;;GA;;;RM)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;; WD). Ini akan

memungkinkan pengguna terpilih menjalankan perintah Windows PowerShell dari jarak jauh di komputer ini."

[Y] Ya [A] Ya untuk Semua [N] Tidak [L] Tidak untuk Semua [S] Tangguhkan [?] Bantuan (defaultnya adalah “Y”):y

Setelah konfigurasi selesai, Anda dapat memeriksa fungsionalitas WinRM menggunakan cmdlet Tes-WSMan. Jika sistem dikonfigurasi dengan benar, informasi serupa dengan berikut ini akan ditampilkan.

PS C:\>Tes-WSMan -Nama Komputer w8c504

Versi Produk: OS: 0.0.0 SP: 0.0 Tumpukan: 3.0

Cmdlet ini juga berfungsi dengan komputer yang menjalankan Windows PowerShell 2.0. Contoh di bawah ini mengilustrasikan permintaan ke pengontrol domain pada Windows Server 2008 dengan menginstal Windows PowerShell 2.0 tempat WinRM dikonfigurasi.

PS C:\>Tes-WSMan -Nama Komputer dc1

wsmid: http://schemas.dmtf.org/wbem/wsman/identity/1/wsmanidentity.xsd

Versi Protokol: http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd

Vendor Produk: Microsoft Corporation

Versi Produk: OS: 0.0.0 SP: 0.0 Tumpukan: 2.0

Jika WinRM tidak dikonfigurasi, pesan kesalahan akan dikembalikan. Jika sistem operasi Windows 8, pesannya adalah sebagai berikut.

PS C:\> Tes-WSMan -Nama Komputer w8c10

Tes-WSMan:

xmlns:f=”http: //schemas.microsoft.com/wbem/wsman/1/wsmanfault” Code=”2150859046″

Machine="w8c504.iammred.net">WinRM tidak dapat menyelesaikan operasi. Memeriksa

bahwa nama komputer yang ditentukan valid, bahwa komputer dapat diakses melalui

jaringan, dan pengecualian firewall untuk layanan WinRM diaktifkan dan diizinkan

akses dari komputer ini. Secara default, pengecualian firewall WinRM untuk publik

profiles membatasi akses ke komputer jarak jauh dalam subnet lokal yang sama.

Pada baris:1 karakter:1

Tes-WSMan -Nama Komputer w8c10

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Info Kategori: InvalidOperation: (w8c10:String) , InvalidOperationException

FullyQualifiedErrorId: WsManError,Microsoft.WSMan.Management.TestWSManCommand

Perlu diingat bahwa mengaktifkan manajemen jarak jauh dengan cmdlet Enable-PSRemoting tidak mengaktifkan pengecualian firewall Manajemen Jarak Jauh, sehingga upaya melakukan ping ke mesin Windows 8 tidak akan berhasil.

PS C:\>ping w8c504

Ping w8c504.iammred.net dengan 32 byte data:

Waktu permintaan habis.

Waktu permintaan habis.

Waktu permintaan habis.

Waktu permintaan habis.

Statistik Ping untuk 192.168.0.56:

Paket: Terkirim = 4, Diterima = 0, Hilang = 4 (100% hilang).

Dalam kasus Windows Server 2012, semuanya berfungsi.

PS C:\>ping w8s504

Ping w8s504.iammred.net dengan 32 byte data:

<1ms TTL=128

Balasan dari 192.168.0.57: byte=32 kali<1ms TTL=128

Balasan dari 192.168.0.57: byte=32 kali<1ms TTL=128

Balasan dari 192.168.0.57: byte=32 kali<1ms TTL=128

Statistik Ping untuk 192.168.0.57:

Paket: Terkirim = 4, Diterima = 4, Hilang = 0 (0% hilang),

Perkiraan waktu perjalanan pulang pergi dalam mili detik:

Minimum = 0 md, Maksimum = 0 md, Rata-rata = 0 md

Itu saja untuk mengaktifkan WinRM.

Ed Wilson, Orang Pembuatan Skrip Microsoft

Asli:

Saat ini, PowerShell Remoting adalah alat utama untuk manajemen jarak jauh sistem operasi Windows. Oleh karena itu, setiap administrator sistem Windows harus mengetahui kemampuannya dan menggunakannya dalam tugas sehari-hari mereka. Untuk menjalankan perintah di komputer jarak jauh menggunakan PowerShell Remoting, Anda dapat menggunakan cmdlet Powershell Perintah-Panggil(alias icm).

Fungsi cmdlet Invoke-Command didasarkan pada protokol Layanan Web untuk Manajemen ( WS-Manajemen) dan layanan Manajemen Jarak Jauh Windows ( MenangRM), digunakan untuk komunikasi. Komunikasi antar komputer dilakukan menggunakan HTTP (default) atau HTTPS. Semua lalu lintas antara dua komputer dienkripsi pada tingkat protokol. Beberapa metode otentikasi didukung, termasuk NTLM dan Kerberos. Kemampuan untuk membuat sesi jarak jauh diperkenalkan di Powershell 2.0.

Untuk menyambung ke komputer dari jarak jauh melalui PowerShell Remoting, Anda perlu melakukan sejumlah pengaturan di dalamnya:

  1. Anda harus mengizinkan koneksi jarak jauh: Aktifkan-PSRemoting -Force
  2. Mulai layanan WinRM: Mulai Layanan WinRM
  3. Buat aturan Windows Firewall yang mengizinkan koneksi masuk menggunakan protokol ini.

Komputer yang Anda rencanakan untuk mengelola komputer/server lain dari jarak jauh melalui PowerShell Remoting juga perlu dikonfigurasi:

  1. Anda harus mengizinkan koneksi ke sistem jarak jauh. Untuk memberikan akses ke semua komputer jarak jauh, gunakan perintah: Set-Item wsman:\localhost\client\trustedhosts * -Force
  2. Pastikan firewall Anda tidak memblokir koneksi keluar.

Sekarang untuk menjalankan perintah komputer jarak jauh melalui Powershell Remoting (misalnya, Anda ingin memulai ulang layanan pencetakan Spooler), Anda perlu menjalankan perintah berikut:

Invoke-Command -server nama komputer1 -domain kredensial\pengguna1 -scriptblock ( Spooler Layanan Mulai Ulang)

Perintah ini menjalankan perintah Spooler Layanan Mulai Ulang pada komputer jarak jauh bernama server1. Parameter Kredensial digunakan untuk menjalankan perintah dalam konteks keamanan pengguna domain domain\pengguna1.

Saat Anda menentukan nama pengguna, Windows PowerShell menampilkan kotak dialog yang meminta Anda memberikan kata sandi akun pengguna1. Perintah yang ditentukan dalam kurung kurawal kemudian dijalankan di komputer jarak jauh dan mengembalikan hasilnya ke konsol. Setelah perintah dijalankan, sesi PoSh jarak jauh berakhir.

Untuk menjalankan tugas di latar belakang, Anda dapat menentukan parameter -AsJob.

Saat Anda menjalankan perintah di latar belakang, PowerShell tidak mengembalikan hasilnya. Untuk menerimanya, Anda perlu menggunakan cmdlet Terima-Pekerjaan.

Dapatkan-pekerjaan –id 3 |Terima-Pekerjaan

Untuk menjalankan tidak hanya satu perintah, tetapi seluruh skrip PowerShell, cmdlet Invoke-Command memiliki argumen khusus -FilePath, yang harus digunakan sebagai pengganti -ScriptBlock untuk menentukan jalur ke file skrip. Misalnya, saya membuat skrip PoSh kecil yang menampilkan daftar layanan yang dihentikan. Mari kita jalankan skrip ini di komputer jarak jauh:

Invoke-Command -server nama komputer1 -FilePath .\list.ps1

Penting untuk dicatat di sini bahwa Anda tidak perlu menyalin sendiri file skrip ps1 ke komputer jarak jauh. Hasil eksekusi skrip di-output ke konsol.

Seringkali ada kebutuhan untuk menjalankan perintah/skrip yang sama secara bersamaan di beberapa komputer. Menggunakan Invoke-Command, ini diterapkan dengan cukup sederhana. Anda dapat membuat daftar nama komputer yang dipisahkan dengan koma dalam argumen -Nama Komputer.

Invoke-Command -ScriptBlock (spooler Layanan Mulai Ulang) -Nama Komputer server1,server2,server3

Atau masukkan ke dalam array:

$srv_list = @(″server4″,″server5″,″server6″)
Invoke-Command -ScriptBlock (spooler Layanan Mulai Ulang) -Nama Komputer $server

Atau memuat dari file pengujian:

Invoke-Command -ScriptBlock (spooler Layanan Mulai Ulang) –Nama Komputer (Dapatkan-Konten .\servers_list.txt)

Perintah tersebut akan dijalankan di setiap komputer, dan hasil eksekusinya akan ditampilkan di konsol.

Catatan. Cmdlet Invoke-Command memiliki parameter Batas Throttle yang memungkinkan Anda mengatur jumlah maksimum komputer di mana perintah yang sama dapat dijalankan secara bersamaan. Secara default, nomor tersebut dibatasi oleh komputer menjadi digit 32 . Jumlah ini dapat ditingkatkan jika perlu, namun perlu diingat bahwa meningkatkan pengaturan ini akan menambah beban pada prosesor dan memori komputer Anda, jadi operasi ini harus dilakukan dengan hati-hati.

Jika diinstal, perintah dapat dijalankan secara bersamaan di beberapa komputer yang dipilih dari AD menggunakan saluran pipa:

Dapatkan-ADComputer -Filter * -nama properti | pilih (Nama="nama komputer";Ekspresi=($_."nama"))| Invoke-Command -ScriptBlock (nama host)

Setiap kali Invoke-Command dijalankan, sesi baru dibuat, yang menghabiskan sejumlah waktu dan sumber daya CPU. Untuk menghindari pemborosan sumber daya, Anda dapat menggunakan satu sesi untuk menjalankan semua perintah. Sebagai contoh, mari kita buat sesi baru sess1 dengan komputer computer1 dan tetapkan ke variabel $session, lalu jalankan tugas kita di sesi ini:

$sesi = PSSesi Baru -Nama Komputer komputer1 -Nama sess1
Invoke-Command -ScriptBlock ( Spooler Layanan Mulai Ulang ) -Sesi $sesi

Sesi ini akan tetap aktif hingga Anda menutup konsol PowerShell. Anda juga dapat menutup sesi (Disconnect-PSSession) atau menghapusnya (Remove-PSSession).

03/04/2011 Bill Stewart

Windows PowerShell 2.0 menyediakan mekanisme alternatif untuk menyambung ke komputer jarak jauh yang disebut remoting. Mekanisme ini menggunakan layanan Windows Remote Management (WinRM). Ini memungkinkan Anda untuk terhubung ke komputer jarak jauh serta menjalankan perintah yang dijalankan pada komputer jarak jauh tersebut

Pengembangan PowerShell 1.0 merupakan terobosan nyata dalam pengembangan alat manajemen dan otomatisasi untuk Windows XP, serta versi platform OS Windows yang lebih baru. Berbasis platform. .NET Framework, PowerShell 1.0 mencakup struktur perintah (cmdlet) yang konsisten, pemformatan keluaran bawaan yang kuat, dan peningkatan signifikan dalam aksesibilitas teknologi lain, terutama Windows Management Instrumentation (WMI). Namun, meskipun beberapa perintah dan objek gabungan PowerShell 1.0. NET dapat terhubung ke komputer jarak jauh; fungsi ini diterapkan secara berbeda, tergantung pada kasus spesifik. Perintah yang mendukung koneksi jarak jauh memiliki parameter -ComputerName; Selain itu, mereka menggunakan panggilan prosedur jarak jauh (RPC) atau model DCOM saat membuat koneksi.

Dalam banyak situasi, RPC dan DCOM baik dalam menangani tugas manajemen, namun terkadang mereka mengalami masalah saat melakukan prosedur diagnostik dan mengidentifikasi penyebab masalah. Misalnya perintah Get-Service dapat membaca data layanan dari komputer jarak jauh dengan menggunakan parameter -ComputerName, namun perintah ini tidak memiliki parameter -Credential, sehingga untuk menjalankannya Anda harus login dengan akun yang memiliki izin untuk mengakses sistem jarak jauh.

Namun sudah di versi Windows PowerShell 2.0, mekanisme alternatif untuk menghubungkan ke komputer jarak jauh, yang disebut remoting, diterapkan. Mekanisme ini menggunakan layanan Windows Remote Management (WinRM). Ini memungkinkan Anda untuk terhubung ke komputer jarak jauh, serta menjalankan perintah yang dijalankan di komputer jarak jauh tersebut. Izinkan saya menjelaskan apa yang saya katakan dengan sebuah contoh. Koneksi Desktop Jarak Jauh ke GUI sama dengan remote baris perintah Kerang PowerShell. Saat Anda menjalankan perintah gabungan menggunakan mekanisme jarak jauh, perintah tersebut sebenarnya dijalankan di komputer jarak jauh, tetapi Anda dapat melihat hasilnya di mesin lokal.

Di mana saya bisa mendapatkan Windows PowerShell 2.0

PowerShell 2.0 dan WinRM disertakan dengan Windows 7 dan Windows Server 2008 R2, jadi jika Anda menggunakan sistem operasi tersebut, Anda tidak perlu menginstal komponen ini. Jika Anda bekerja dengan sistem Windows Vista SP2, Windows XP SP3, Windows Server 2008 SP2, atau Windows Server 2003 SP2, Anda harus mengunduh dan menginstal paket Windows Management Framework Core (support.microsoft.com/kb/968930).

Aktifkan fitur jarak jauh

Agar komputer Anda dapat membuat sambungan dengan sistem jarak jauh yang memiliki PowerShell terinstal, kondisi berikut harus dipenuhi:

  1. Layanan WinRM harus diaktifkan.
  2. Pendengar WinRM harus diinstal yang menerima koneksi dari satu atau lebih alamat IP.
  3. Windows Firewall harus dikonfigurasi untuk mengizinkan koneksi melalui WinRM.
  4. Sesi PowerShell harus diaktifkan dan dikonfigurasi dengan benar.

Jika komputer Anda tidak menerima koneksi dari PowerShells yang diinstal pada komputer jarak jauh, ketentuan ini tidak diperlukan.

Untuk membantu pengguna memulai secepat mungkin, pengembang Microsoft PowerShell telah membuat perintah Enable-PSRemoting untuk mengonfigurasi komponen ini secara otomatis. Pengaturan ini harus dilakukan bukan pada mesin yang akan Anda gunakan untuk berinteraksi dari jarak jauh, namun pada komputer yang akan Anda akses dari jarak jauh. Anda hanya dapat menjalankan perintah Enable-PSRemoting jika Anda menjalankan PowerShell dengan hak administrator. Jika Anda bekerja dengan Windows Vista, Server 2008 dan mesin yang lebih baru, klik kanan ikon PowerShell dan pilih Jalankan sebagai administrator dari menu drop-down. Jika Anda menjalankan perintah Enable-PSRemoting dengan parameter -Force, sistem tidak akan meminta izin Anda untuk menjalankan setiap langkah konfigurasi saat dijalankan. Untuk informasi lebih lanjut tentang perintah gabungan Enable-PSRemoting, jalankan perintah

Dapatkan-Bantuan Aktifkan-PSRemoting

Jalankan satu perintah di komputer jarak jauh

Cara termudah untuk menyambung ke PowerShell di komputer jarak jauh adalah dengan menggunakan perintah Enter-PSSession. Secara default, perintah ini dijalankan dengan parameter -ComputerName, sehingga parameter ini dapat dihilangkan saat dimasukkan dari keyboard. Misalnya, untuk membuat koneksi dengan komputer jarak jauh bernama rigel, Anda harus masuk dari keyboard

PS C:\> Masuk-PSSession rigel

Harap diperhatikan: untuk kelengkapan, saya sertakan undangan di dalam teks. Anda tidak perlu memasukkan prompt sebagai bagian dari perintah.

Setelah Anda memasuki sesi jarak jauh, sintaks perintah PowerShell berubah. Sekarang akan menyertakan nama komputer jarak jauh yang diapit tanda kurung siku; ini berarti Anda telah membuat koneksi dengan komputer jarak jauh. Dalam hal ini, undangannya akan terlihat seperti ini:

: PS C:\>

Setelah koneksi jarak jauh dibuat, semua perintah yang Anda masukkan pada prompt perintah akan dijalankan pada mesin jarak jauh. Jadi, jika Anda memasukkan perintah

: PS C:\> Dapatkan-ChildItem C:\

Perintah Get-ChildItem akan dijalankan pada mesin jarak jauh. Outputnya akan berisi nama file dan folder yang disimpan di drive C komputer jarak jauh. Untuk mengakhiri sesi jarak jauh, gunakan perintah Exit-PSSession

: PS C:\> Keluar-PSSesi

Mengeksekusi Scriptblock di Komputer Jarak Jauh

Remote PowerShell memungkinkan Anda mengeksekusi blok skrip (yaitu, blok kode PowerShell yang disertakan di dalamnya kawat gigi). Untuk melakukannya, gunakan Invoke-Command dengan parameter -ComputerName. Misalnya, dalam perintah yang ditunjukkan Gambar 1, saya menggunakan Invoke-Command untuk mengeksekusi Get-ChildItem di komputer jarak jauh. Saat Anda melihat Gambar 1, perhatikan bahwa saya tidak menggunakan perintah Enter-PSSession untuk membuat koneksi ke komputer jarak jauh sebelum menjalankan blok skrip. Enter-PSSession dan Invoke-Command adalah dua metode remoting yang berbeda.

Parameter pertama dari Invoke-Command adalah parameter -ScriptBlock; itu menunjuk ke kode yang akan Anda jalankan. Pada Gambar 1, saya menghilangkan nama parameter -ScriptBlock karena bersifat opsional. Parameter -ComputerName berisi nama komputer jarak jauh. Seperti yang Anda lihat di keluaran perintah Get-ChildItem, PowerShell bahkan mencantumkan nama komputer jarak jauh di kolom PSComputerName keluaran untuk kenyamanan operator.

Jalankan blok skrip di beberapa komputer jarak jauh

Blok skrip juga dapat dijalankan di beberapa komputer jarak jauh. Ini disebut konfigurasi satu-ke-banyak atau penyebaran. Pada Gambar 1, parameter -ComputerName dari Invoke-Command berisi satu nama, namun Anda dapat menyertakan beberapa nama komputer. Ya, tim

PS C:\> Invoke-Command (Get-ChildItem env: co*) -Titan komputer, rigel

Mengaktifkan perintah Get-ChildItem untuk dijalankan pada dua komputer jarak jauh. Dalam teks artikel perintah ini dibagi menjadi beberapa baris, namun harus dimasukkan sebagai satu baris di konsol PowerShell. Hal yang sama berlaku untuk perintah lain yang dibagi menjadi beberapa baris. Seperti pada Gambar 1, kolom PSComputerName pada output akan berisi nama-nama komputer.

Jalankan blok skrip di latar belakang

PowerShell 2.0 menyediakan kemampuan untuk menjalankan pekerjaan di latar belakang, yang berarti operator dapat menjalankan perintah di latar belakang. Fitur ini berguna ketika menjalankan perintah yang membutuhkan waktu lama untuk diselesaikan.

Untuk menjalankan pekerjaan latar belakang komputer lokal, Anda dapat menggunakan perintah Mulai-Pekerjaan. Namun harus dikatakan bahwa perintah ini tidak memiliki parameter -ComputerName, yang berarti tidak dapat digunakan untuk mengeksekusi pekerjaan latar belakang pada mesin jarak jauh. Sebagai gantinya, Anda perlu mengeluarkan Invoke-Command dengan parameter -AsJob. Jadi, perintah teratas pada Gambar 2 menyebabkan blok skrip dijalankan sebagai pekerjaan latar belakang pada komputer titan jarak jauh. Setelah saya memasukkan perintah ini, sebuah prompt segera muncul di layar: PowerShell mengirimkan blok skrip untuk dieksekusi di komputer jarak jauh dan kemudian mengembalikan kendali kepada saya. Peringatan tersebut menyatakan bahwa perintah yang dijalankan tidak sesuai dengan jendela konsol dan oleh karena itu tidak disertakan dalam output. Jika jendela konsol saya lebih lebar, pemformat PowerShell akan menyertakan perintah dalam daftar keluaran. Kolom Id dan Name menunjukkan pekerjaan (masing-masing ID dan nama akrabnya), dan kolom State menunjukkan apakah pekerjaan dalam keadaan berjalan, ditangguhkan, atau selesai. Kolom HasMoreData berisi informasi yang menunjukkan bahwa semua data untuk pekerjaan tertentu telah diambil, atau bahwa pekerjaan tersebut berisi lebih banyak informasi yang harus diambil.

Untuk menentukan apakah pekerjaan latar belakang telah selesai berjalan, Anda dapat menjalankan perintah Get-Job, seperti yang ditunjukkan pada perintah kedua pada Gambar 2. Jika Anda tidak menggunakan parameter apa pun, Get-Job memeriksa status semua pekerjaan yang berjalan selama saat ini. sidang. Jika Anda menjalankan beberapa pekerjaan secara bersamaan, Anda dapat menggunakan parameter seperti -Id atau -Name untuk menunjukkan pekerjaan mana yang ingin Anda periksa. Ketika pekerjaan latar belakang selesai, kolom Status pada output akan Selesai.

Anda dapat menggunakan perintah Terima-Pekerjaan untuk membaca hasil pekerjaan latar belakang. Perintah ini, seperti perintah Get-Job, mengembalikan output dari semua pekerjaan yang berjalan selama sesi saat ini, kecuali Anda telah menggunakan parameter untuk menentukan pekerjaan mana yang Anda minati. Jadi, perintah terakhir Gambar 2 menyertakan parameter -Id, yang menentukan bahwa Anda menginginkan keluaran dari ID pekerjaan 9. Saya telah menghilangkan namanya parameter -Id, karena tidak perlu ditentukan. Layar 3 ditampilkan baris terakhir data keluaran terkait dengan pelaksanaan pekerjaan latar belakang jarak jauh yang dimaksud.

Membuat Sesi PowerShell

Contoh di atas menunjukkan cara mengakses perintah PowerShell di mesin jarak jauh dan cara menjalankan perintah di mesin jarak jauh. Yang belum saya sebutkan adalah bahwa remoting selalu dilakukan dalam konteks sesi. Misalnya, sesi adalah tempat PowerShell berada. Saat Anda membuka jendela konsol PowerShell atau jendela lingkungan skrip terintegrasi (ISE) PowerShell, Anda membuat sesi. Tanpa jarak jauh, semua sesi berjalan di komputer lokal dan tidak bergantung satu sama lain. Semua contoh remoting di atas membuat sesi sementara yang secara otomatis dihentikan ketika remoting berakhir. Dimungkinkan juga untuk membuat instance sesi jarak jauh dan menggunakannya kembali. Pendekatan ini jauh lebih efisien jika diperlukan akses ke komputer jarak jauh lebih dari satu kali.

Untuk membuat sesi baru, gunakan perintah PSSession Baru dengan parameter -ComputerName. Nama parameter ini dapat dihilangkan dari perintah. Ya, tim

C:\> $sessions = Phineas, ferb, perry di PSSession baru

membuat tiga sesi pada tiga komputer bernama phineas, ferb dan perry. Anda dapat melihat sesi ini dengan membuat variabel $sessions. Untuk melakukan ini, masukkan nama pada baris perintah

$sesi

dan tekan enter. Parameter -Session dari Invoke-Command mendukung objek sesi yang dibuat dengan perintah New-PSSession, sehingga Anda kemudian dapat menggunakan perintah yang serupa dengan berikut ini:

C:\> Invoke-Command (Get-ChildItem) -sesi $sessions

Perintah ini menjalankan perintah Get-ChildItem pada phineas, ferb, dan perry, tetapi tidak mengakhiri koneksi. Anda dapat menambahkan parameter -AsJob dan menjalankan perintah di latar belakang:

C:\> Invoke-Command (Get-ChildItem) -sesi $sesi -asjob

Pendekatan baru dalam bekerja

Remote PowerShell adalah mekanisme baru yang kuat untuk menjalankan perintah pada komputer jarak jauh. Saya harap artikel ini mendorong Anda untuk mengeksplorasi kemungkinan-kemungkinan baru. Informasi selengkapnya tentang remoting, termasuk masalah diagnostik, dapat ditemukan di topik bantuan PowerShell about_Remote di technet.microsoft.com/en-us/library/dd347616.aspx.

Bill Stewart ( [dilindungi email]) - sistemik dan administrator jaringan Perusahaan Kamar Mayat Prancis, New Mexico



Saya sering bekerja dengan perintah pada sistem jarak jauh melalui PowerShell, baik selama pentest maupun saat memecahkan masalah sehari-hari. Perintah jarak jauh diluncurkan melalui protokol WinRM (Windows Remote Management), yang sejauh yang saya tahu, didukung di Windows Vista SP 1, Windows 7, Windows Server 2008 dan Windows Server 2012.

Perkenalan

Saya sering bekerja dengan perintah pada sistem jarak jauh melalui PowerShell, baik selama pentest maupun saat memecahkan masalah sehari-hari. Perintah jarak jauh diluncurkan melalui protokol WinRM (Windows Remote Management), yang sejauh yang saya tahu, didukung di Windows Vista SP 1, Windows 7, Windows Server 2008 dan Windows Server 2012.

Pengaturan awal

Sebelum Anda dapat mulai bekerja dengan sistem jarak jauh, Anda perlu menyelesaikan penyiapan.

1. Luncurkan konsol PowerShell sebagai administrator dan jalankan perintah berikut:

Aktifkan-PSRemoting -force

Perintah di atas memungkinkan perintah dijalankan pada sistem jarak jauh. Jika Anda mengalami masalah, gunakan perintah di bawah ini:

2. Pastikan layanan WinRM dimulai secara otomatis.

# Atur mode yang diinginkan

Setel Layanan WinRM -StartMode Otomatis

# Periksa apakah layanan sedang berjalan

Dapatkan-WmiObject -Kelas win32_service | Dimana-Objek ($_.name -seperti "WinRM")

3. Atur semua host ke status “tepercaya” (dapat dilakukan nanti).

# Percayai semua host

Set-Item WSMan:localhost\client\trustedhosts -nilai *

# Periksa konfigurasi host tepercaya

Dapatkan Item WSMan:\localhost\Client\TrustedHosts

Contoh bekerja dengan sistem jarak jauh

Menjalankan satu perintah pada sistem jarak jauh

Perintah "Invoke-Command" dirancang untuk menjalankan perintah pada sistem jarak jauh. Anda dapat bekerja atas nama pengguna saat ini, atau gunakan akun pihak ketiga jika Anda menjalankan sistem yang bukan bagian dari domain:

Perintah-Panggil –Nama Komputer MyServer1 -ScriptBlock (Nama Host)
Invoke-Command –Nama Komputer MyServer1 -Kredensial demo\serveradmin -ScriptBlock (Nama Host)

Jika modul untuk bekerja dengan ActiveDirectory diinstal, perintah pada beberapa sistem dapat dijalankan menggunakan pipeline:

Dapatkan-ADComputer -Filter * -nama properti | pilih @(Nama="namakomputer";Ekspresi=($_."nama")) |
Invoke-Command -ScriptBlock (nama host)

Terkadang Anda perlu menjalankan skrip yang disimpan secara lokal di sistem jarak jauh:

Perintah-Panggilan -Nama Komputer MyServer1 -Jalur File C:\pentest\Invoke-Mimikatz.ps1
Invoke-Command -ComputerName MyServer1 -FilePath C:\pentest\Invoke-Mimikatz.ps1 -Kredensial demo\serveradmin

Jika Anda menghasilkan perintah atau fungsi secara dinamis, yang kemudian dikirimkan ke sistem jarak jauh, Anda dapat menggunakan sekumpulan perintah invoke-expression dan invoke-command:

$Perintah Saya = "nama host"
$MyFunction = "fungsi jahat (host-tulis `"Menjadi jahat...`";iex -command $MyCommand);jahat"
panggil-perintah -Nama Komputer MyServer1 -Kredensial demo\serveradmin -ScriptBlock
(Panggil-Ekspresi -Perintah "$args") -Daftar Argumen $Fungsi Saya

Mengorganisir konsol interaktif pada sistem jarak jauh

Anda dapat mengatur konsol interaktif di PowerShell pada sistem jarak jauh menggunakan perintah "Enter-PsSession" (seperti SSH). Perintah "Enter-PsSession" juga dijalankan sebagai pengguna saat ini atau menggunakan akun alternatif:

Masukkan-PsSession –Nama Komputer server1.domain.com
Masukkan-PsSession –Nama Komputer server1.domain.com –Kredensial domain\serveradmin

Menutup sesi dilakukan dengan menggunakan perintah "Exit-PsSession":

Membuat sesi latar belakang

Satu lagi peluang yang berguna memungkinkan Anda membuat sesi latar belakang (perintah "PsSession Baru"). Sesi latar belakang dapat berguna saat menjalankan banyak perintah di banyak sistem. Seperti perintah sebelumnya, perintah "PsSession Baru" dijalankan sebagai pengguna saat ini, atau menggunakan akun alternatif:

PSSesi Baru -ComputerName server1.domain.com
PSSesi Baru –Nama Komputer server1.domain.com –Kredensial domain\serveradmin

Jika modul untuk bekerja dengan ActiveDirectory diinstal, dimungkinkan untuk membuat sesi latar belakang secara bersamaan untuk beberapa sistem (trik ini dapat dilakukan dalam berbagai cara). Di bawah ini adalah contoh pembuatan sesi latar belakang untuk semua sistem yang termasuk dalam domain. Dalam contoh ini, sesi dibuat pada sistem non-domain menggunakan akun domain alternatif.

Baru-PSDrive -PSProvider ActiveDirectory -Nama RemoteADS -Root "
" -Server a.b.c.d -domain kredensial\pengguna
cd IKLAN Jarak Jauh:
Dapatkan-ADComputer -Filter * -Nama properti | pilih @(Nama="Nama Komputer";Ekspresi=($_."nama"))
| PSSesi Baru

Menampilkan daftar sesi latar belakang

Setelah beberapa sesi latar belakang dibuat, Anda dapat melihat daftarnya menggunakan perintah "Get-PsSession".

Berinteraksi dengan Sesi Latar Belakang

Pada awalnya, saya memiliki perasaan yang mirip dengan cara saya bekerja dengan sesi di MetaSploit. Namun, sesi latar belakang di PowerShell sedikit lebih stabil. Di bawah ini adalah contoh interaksi menggunakan ID sesi:

Masukkan-PsSession –id 3

Untuk keluar dari sesi, gunakan perintah "Exit-PsSession". Sesi akan kembali ke latar belakang.

Menjalankan perintah melalui sesi latar belakang

Jika Anda ingin menjalankan perintah di semua sesi aktif, gunakan kombinasi perintah "Invoke-Command" dan "Get-PsSession".

Panggil-Perintah -Sesi (Dapatkan-PSSession) -ScriptBlock (Nama Host)

Menghapus sesi latar belakang

Untuk menghapus semua sesi aktif, gunakan perintah "Disconnect-PsSession".

Dapatkan-PSSession | Putuskan-PSSession

Kesimpulan

Perintah jarak jauh di PowerShell membuka peluang besar bagi administrator dan pentester. Apa pun situasinya, cara Anda bekerja dengan sistem jarak jauh, semuanya bermuara pada hal berikut:

  • Untuk menjalankan satu perintah pada sistem jarak jauh, gunakan "Invoke-Command".
  • Untuk berinteraksi dengan satu sistem, gunakan "Enter-PSSession".
  • Jika Anda ingin menjalankan banyak perintah di banyak sistem, gunakan sesi latar belakang.

Saya harap artikel ini bermanfaat bagi Anda.

Belum lama ini saya harus meluangkan sedikit waktu untuk mengatur akses jarak jauh melalui Powershell. Pendekatan ini menurut saya merupakan alternatif yang sangat baik untuk Layanan Desktop Jarak Jauh dalam beberapa kasus (restart layanan pada hosting VDS jarak jauh, buat cadangan, melihat status sistem, dll.).

Kemampuan untuk membuat sesi Powershell jarak jauh diperkenalkan di versi 2. Untuk melakukannya, gunakan cmdlet Enter-PSSession / Invoke-Command. Namun, lingkungan harus dipersiapkan sebelum menggunakannya.

Apa yang kami lakukan di server:

Langkah 1: Buka konsol Powershell dan izinkan sesi jarak jauh menggunakan cmdlet Enable-PSRemoting dengan tombol Force.

Aktifkan-PSRemoting -Force

Langkah 2: Pastikan layanan WinRM berjalan.

Mulai Layanan WinRM

Langkah 3: Kami mengonfigurasi aturan di firewall sehingga koneksi masuk dapat dilakukan.

Pada komputer yang akan digunakan sebagai klien Anda juga perlu melakukan beberapa langkah:

Langkah 1: Izinkan koneksi ke host jarak jauh. Untuk mengakses node mana pun, Anda dapat menggunakan konstruksi berikut:

Set-Item wsman:\localhost\client\trustedhosts * -Force

Langkah 2: Pastikan firewall Anda tidak memblokir koneksi keluar.

Sekarang untuk terhubung ke node jarak jauh melalui Powershell Anda dapat melakukan ini:

Masukkan-PSSession 192.168.1.160 -Kredensial VMNAME\Pengguna

Nilai 192.168.1.160 dan VMNAME\User harus diganti dengan alamat dan nama host jarak jauh pengguna Windows di server.

Sekarang akses jarak jauh Ia bekerja melalui Powershell. Namun, ada nuansa lain. Mungkin sebagian dari Anda menggunakan profil di Powershell. Profil adalah skrip khusus yang diluncurkan saat konsol itu sendiri dimulai. Di sini, misalnya, Anda dapat menentukan semua alias yang diperlukan dan melakukan langkah awal.

Masalahnya adalah profil tidak dimulai saat menggunakan sesi jarak jauh. Ini dapat diatasi dengan menggunakan konfigurasi koneksi yang berbeda. Untuk melakukan ini, Anda harus mendaftarkan konfigurasi terlebih dahulu server jarak jauh. Anda dapat melakukan ini dengan menjalankan cmdlet Register-PSSessionConfiguration. Dalam hal ini, setiap konfigurasi diberi nama. Untuk setiap konfigurasi, Anda dapat mengatur jalur ke skrip yang akan dieksekusi saat sesi dimulai.

Daftar-PSSessionConfiguration -nama Config1 -startupScript c:\scripts\Startup.ps1

Kemudian, saat menyambung ke host jarak jauh, Anda harus menentukan nama konfigurasi saat menggunakan cmdlet Enter-PSSession.

Masukkan-PSSession 192.168.1.160 -ConfigurationName Config1 -Credential VMNAME\User

Sekarang Anda dapat menghindari pemborosan sumber daya server untuk membuat sesi koneksi melalui Layanan Desktop Jarak Jauh dan mengelola server dari jarak jauh menggunakan Powershell.