Bagikan melalui


Otomatisasi dan manajemen Komputer Virtual menggunakan PowerShell

Anda dapat menggunakan PowerShell Direct untuk menjalankan PowerShell arbitrer di komputer virtual Windows 10 atau Windows Server 2016 dari host Hyper-V Anda terlepas dari konfigurasi jaringan atau pengaturan manajemen jarak jauh.

Berikut adalah beberapa cara Anda dapat menjalankan PowerShell Direct:

Persyaratan

Persyaratan sistem operasi:

  • Host: Windows 10, Windows Server 2016, atau yang lebih baru menjalankan Hyper-V.
  • Komputer Tamu/Virtual: Windows 10, Windows Server 2016, atau yang lebih baru.

Jika Anda mengelola komputer virtual yang lebih lama, gunakan Koneksi Komputer Virtual (VMConnect) atau konfigurasikan jaringan virtual untuk komputer virtual.

Persyaratan konfigurasi:

  • Komputer virtual harus berjalan secara lokal pada host.
  • Komputer virtual harus diaktifkan dan berjalan dengan setidaknya satu profil pengguna yang dikonfigurasi.
  • Anda harus masuk ke komputer host sebagai administrator Hyper-V.
  • Anda harus menyediakan kredensial pengguna yang valid untuk komputer virtual.

Membuat dan keluar dari sesi PowerShell interaktif

Cara termampu untuk menjalankan perintah PowerShell di komputer virtual adalah dengan memulai sesi interaktif.

Ketika sesi dimulai, perintah yang Anda ketik berjalan pada komputer virtual, sama seperti Anda mengetikkannya langsung ke sesi PowerShell pada komputer virtual itu sendiri.

Untuk memulai sesi interaktif:

  1. Pada host Hyper-V, buka PowerShell sebagai Administrator.

  2. Jalankan salah satu perintah berikut untuk membuat sesi interaktif menggunakan nama komputer virtual atau GUID:

Enter-PSSession -VMName <VMName>
Enter-PSSession -VMId <VMId>

Berikan kredensial untuk komputer virtual saat diminta.

  1. Jalankan perintah pada komputer virtual Anda.

Anda akan melihat VMName sebagai awalan untuk perintah PowerShell Anda seperti yang ditunjukkan:

[VMName]: PS C:\>

Setiap eksekusi perintah akan berjalan di komputer virtual Anda. Untuk menguji, Anda dapat menjalankan ipconfig atau hostname memastikan bahwa perintah ini berjalan di komputer virtual.

  1. Setelah selesai, jalankan perintah berikut untuk menutup sesi:

    Exit-PSSession 
    

Catatan: Jika sesi Anda tidak tersambung, lihat pemecahan masalah untuk kemungkinan penyebabnya.

Untuk mempelajari selengkapnya tentang cmdlet ini, lihat Enter-PSSession dan Exit-PSSession.


Menjalankan skrip atau perintah dengan Invoke-Command

PowerShell Direct dengan Invoke-Command sangat cocok untuk situasi di mana Anda perlu menjalankan satu perintah atau satu skrip pada komputer virtual tetapi tidak perlu terus berinteraksi dengan komputer virtual di luar titik itu.

Untuk menjalankan satu perintah:

  1. Pada host Hyper-V, buka PowerShell sebagai Administrator.

  2. Jalankan salah satu perintah berikut untuk membuat sesi menggunakan nama komputer virtual atau GUID:

    Invoke-Command -VMName <VMName> -ScriptBlock { command } 
    Invoke-Command -VMId <VMId> -ScriptBlock { command }
    

    Berikan kredensial untuk komputer virtual saat diminta.

    Perintah akan dijalankan pada komputer virtual, jika ada output ke konsol, perintah akan dicetak ke konsol Anda. Koneksi akan ditutup secara otomatis segera setelah perintah berjalan.

Untuk menjalankan skrip:

  1. Pada host Hyper-V, buka PowerShell sebagai Administrator.

  2. Jalankan salah satu perintah berikut untuk membuat sesi menggunakan nama komputer virtual atau GUID:

    Invoke-Command -VMName <VMName> -FilePath C:\host\script_path\script.ps1 
    Invoke-Command -VMId <VMId> -FilePath C:\host\script_path\script.ps1 
    

    Berikan kredensial untuk komputer virtual saat diminta.

    Skrip akan dijalankan pada komputer virtual. Koneksi akan ditutup secara otomatis segera setelah perintah berjalan.

Untuk mempelajari selengkapnya tentang cmdlet ini, lihat Invoke-Command.


Menyalin file dengan New-PSSession dan Copy-Item

Catatan: PowerShell Direct hanya mendukung sesi persisten di Windows build 14280 dan yang lebih baru

Sesi PowerShell persisten sangat berguna saat menulis skrip yang mengoordinasikan tindakan di satu atau beberapa komputer jarak jauh. Setelah dibuat, sesi persisten ada di latar belakang hingga Anda memutuskan untuk menghapusnya. Ini berarti Anda dapat mereferensikan sesi yang sama berulang kali dengan Invoke-Command atau Enter-PSSession tanpa meneruskan kredensial.

Dengan token yang sama, sesi menahan status. Karena sesi persisten berlanjut, variabel apa pun yang dibuat dalam sesi atau diteruskan ke sesi akan dipertahankan di beberapa panggilan. Ada sejumlah alat yang tersedia untuk bekerja dengan sesi persisten. Untuk contoh ini, kita akan menggunakan New-PSSession dan Copy-Item untuk memindahkan data dari host ke komputer virtual dan dari komputer virtual ke host.

Untuk membuat sesi, salin file:

  1. Pada host Hyper-V, buka PowerShell sebagai Administrator.

  2. Jalankan salah satu perintah berikut untuk membuat sesi PowerShell persisten ke komputer virtual menggunakan New-PSSession.

$s = New-PSSession -VMName <VMName> -Credential (Get-Credential)
$s = New-PSSession -VMId <VMId> -Credential (Get-Credential)

Berikan kredensial untuk komputer virtual saat diminta.

Peringatan:
Ada bug dalam build sebelum 14500. Jika kredensial tidak ditentukan secara eksplisit dengan -Credential bendera, layanan di tamu akan crash dan perlu dimulai ulang. Jika Anda mengalami masalah ini, instruksi solusi tersedia di sini.

  1. Salin file ke komputer virtual.

Untuk menyalin C:\host_path\data.txt ke komputer virtual dari komputer host, jalankan:

Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
  1. Salin file dari komputer virtual (aktif ke host).

Untuk menyalin C:\guest_path\data.txt ke host dari komputer virtual, jalankan:

Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
  1. Hentikan sesi persisten menggunakan Remove-PSSession.
Remove-PSSession $s

Pemecahan Masalah

Ada sekumpulan kecil pesan kesalahan umum yang muncul melalui PowerShell Direct. Berikut adalah yang paling umum, beberapa penyebab, dan alat untuk mendiagnosis masalah.

Parameter -VMName atau -VMID tidak ada

Masalah:
Enter-PSSession, Invoke-Command, atau New-PSSession tidak memiliki -VMName parameter atau -VMId .

Potensi penyebab:
Masalah yang paling mungkin adalah bahwa PowerShell Direct tidak didukung oleh sistem operasi host Anda.

Anda dapat memeriksa build Windows Anda dengan menjalankan perintah berikut:

[System.Environment]::OSVersion.Version

Jika Anda menjalankan build yang didukung, dimungkinkan juga versi PowerShell Anda tidak menjalankan PowerShell Direct. Untuk PowerShell Direct dan JEA, versi utama harus 5 atau yang lebih baru.

Anda dapat memeriksa build versi PowerShell dengan menjalankan perintah berikut:

$PSVersionTable.PSVersion

Kesalahan: Sesi jarak jauh mungkin telah berakhir

Catatan:
Untuk Enter-PSSession antara build host 10240 dan 12400, semua kesalahan di bawah ini dilaporkan sebagai "Sesi jarak jauh mungkin telah berakhir".

Pesan kesalahan:

Enter-PSSession : An error has occurred which Windows PowerShell cannot handle. A remote session might have ended.

Potensi penyebab:

  • Komputer virtual ada tetapi tidak berjalan.
  • OS tamu tidak mendukung PowerShell Direct (lihat persyaratan)
  • PowerShell belum tersedia di tamu
    • Sistem operasi belum selesai booting
    • Sistem operasi tidak dapat melakukan boot dengan benar
    • Beberapa peristiwa waktu boot memerlukan input pengguna

Anda dapat menggunakan cmdlet Get-VM untuk memeriksa untuk melihat VM mana yang berjalan di host.

Pesan kesalahan:

New-PSSession : An error has occurred which Windows PowerShell cannot handle. A remote session might have ended.

Potensi penyebab:

  • Salah satu alasan yang tercantum di atas -- semuanya sama-sama berlaku untuk New-PSSession
  • Bug dalam build saat ini di mana kredensial harus secara eksplisit diteruskan dengan -Credential. Ketika ini terjadi, seluruh layanan macet di sistem operasi tamu dan perlu dimulai ulang. Anda dapat memeriksa apakah sesi masih tersedia dengan Enter-PSSession.

Untuk mengatasi masalah kredensial, masuk ke komputer virtual menggunakan VMConnect, buka PowerShell, dan mulai ulang layanan vmicvmsession menggunakan PowerShell berikut:

Restart-Service -Name vmicvmsession

Kesalahan: Set parameter tidak dapat diatasi

Pesan kesalahan:

Enter-PSSession : Parameter set cannot be resolved using the specified named parameters.

Potensi penyebab:

  • -RunAsAdministrator tidak didukung saat menyambungkan ke komputer virtual.

    Saat menyambungkan ke kontainer Windows, -RunAsAdministrator bendera memungkinkan koneksi Administrator tanpa kredensial eksplisit. Karena komputer virtual tidak memberikan akses administrator tersirat host, Anda perlu memasukkan kredensial secara eksplisit.

Info masuk administrator dapat diteruskan ke komputer virtual dengan -Credential parameter atau dengan memasukkannya secara manual saat diminta.

Kesalahan: Kredensial tidak valid.

Pesan kesalahan:

Enter-PSSession : The credential is invalid.

Potensi penyebab:

  • Kredensial tamu tidak dapat divalidasi
    • Kredensial yang disediakan salah.
    • Tidak ada akun pengguna di tamu (OS belum di-boot sebelumnya)
    • Jika menyambungkan sebagai Administrator: Administrator belum ditetapkan sebagai pengguna aktif. Pelajari lebih lanjut di sini.

Kesalahan: Parameter VMName input tidak diselesaikan ke komputer virtual apa pun.

Pesan kesalahan:

Enter-PSSession : The input VMName parameter does not resolve to any virtual machine.

Potensi penyebab:

  • Anda bukan Administrator Hyper-V.
  • Komputer virtual tidak ada.

Anda dapat menggunakan cmdlet Get-VM untuk memeriksa apakah info masuk yang Anda gunakan memiliki peran administrator Hyper-V dan untuk melihat VM mana yang berjalan secara lokal di host dan di-boot.


Sampel dan Panduan Pengguna

PowerShell Direct mendukung JEA (Just Enough Administration). Lihat panduan pengguna ini untuk mencobanya.

Lihat sampel di GitHub.