Bagikan melalui


Otomatisasi dan manajemen komputer virtual menggunakan PowerShell

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

Berikut adalah beberapa cara untuk 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 sambungkan melalui koneksi jaringan.

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 memberikan kredensial pengguna yang valid untuk komputer virtual.

Membuat dan keluar dari sesi PowerShell interaktif

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

Ketika sesi dimulai, perintah yang Anda ketik berjalan pada komputer virtual, seolah-olah 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>
    

    Masukkan kredensial untuk komputer virtual saat diminta.

  3. Jalankan perintah di komputer virtual Anda. Anda akan melihat VMName sebagai awalan untuk prompt PowerShell Anda sebagai berikut:

    [VMName]: PS C:\>
    

    Perintah apa pun yang Anda jalankan dijalankan pada komputer virtual Anda. Untuk menguji, menjalankan ipconfig , atau hostname memastikan bahwa perintah ini berjalan di komputer virtual.

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

     Exit-PSSession 
    

Nota

Jika sesi Anda tidak akan 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 }
    

    Masukkan kredensial untuk komputer virtual saat diminta.

    Perintah berjalan pada komputer virtual. Jika perintah menghasilkan output, Anda akan melihatnya di konsol Anda. Koneksi 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 
    

    Masukkan kredensial untuk komputer virtual saat diminta.

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

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

Menyalin file dengan New-PSSession dan Copy-Item

Nota

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 menyimpan status. Karena sesi persisten berlanjut, variabel apa pun yang Anda buat dalam sesi atau meneruskan ke sesi dipertahankan di beberapa panggilan. Anda dapat menggunakan sejumlah alat untuk bekerja dengan sesi persisten. Untuk contoh ini, gunakan 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 dengan menggunakan New-PSSession.

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

    Masukkan kredensial untuk komputer virtual saat diminta.

    Peringatan

    Ada bug dalam build sebelum 14500. Jika Anda tidak secara eksplisit menentukan kredensial dengan flag -Credential, layanan pada mesin tamu mengalami gagal dan perlu dijalankan ulang. Jika Anda mengalami masalah ini, lihat bagian Kesalahan: Sesi jarak jauh mungkin telah berakhir untuk instruksi solusi.

  3. 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\
    
  4. 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\
    
  5. Hentikan sesi persisten dengan menggunakan Remove-PSSession.

    Remove-PSSession $s
    

Troubleshooting

PowerShell Direct menampilkan serangkaian kecil pesan kesalahan umum. Bagian berikut menjelaskan pesan kesalahan 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 sistem operasi host Anda tidak mendukung PowerShell Direct.

Anda dapat memeriksa build Windows dengan menjalankan perintah berikut:

[System.Environment]::OSVersion.Version

Jika Anda menjalankan build yang didukung, ada kemungkinan juga bahwa versi PowerShell Anda tidak mendukung 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

Nota

Untuk Enter-PSSession antara build host 10240 dan 12400, semua kesalahan dilaporkan sebagai "Sesi jarak jauh mungkin sudah berakhir".

Pesan kesalahan:

Enter-PSSession : Terjadi kesalahan yang tidak dapat ditangani windows PowerShell. Sesi jarak jauh mungkin telah berakhir.

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

Gunakan cmdlet Get-VM untuk memeriksa VM mana yang berjalan di host.

Pesan kesalahan:

New-PSSession : Terjadi kesalahan yang tidak dapat ditangani windows PowerShell. Sesi jarak jauh mungkin telah berakhir.

Potensi penyebab:

  • Salah satu alasan yang tercantum sebelumnya -- semuanya berlaku untuk New-PSSession
  • Ada bug dalam build saat ini yang mengharuskan Anda untuk secara eksplisit mengirimkan kredensial dengan -Credential. Ketika bug 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 dengan perintah PowerShell berikut:

Restart-Service -Name vmicvmsession

Kesalahan: Setelan parameter tidak dapat diatasi

Pesan kesalahan:

Enter-PSSession : Set parameter tidak dapat diselesaikan dengan menggunakan parameter bernama yang ditentukan.

Potensi penyebab:

  • Anda tidak dapat menggunakan -RunAsAdministrator 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.

Anda dapat meneruskan kredensial administrator ke komputer virtual dengan -Credential parameter atau dengan memasukkannya secara manual saat diminta.

Kesalahan: Kredensial tidak valid

Pesan kesalahan:

Enter-PSSession : Kredensial tidak valid.

Potensi penyebab:

  • Kredensial tamu tidak dapat divalidasi
    • Kredensial yang disediakan salah.
    • Tidak ada akun pengguna di tamu (OS tidak melakukan boot sebelumnya)
    • Jika menyambungkan sebagai Administrator: Administrator tidak ditetapkan sebagai pengguna aktif. Untuk informasi selengkapnya, lihat Mengaktifkan dan Menonaktifkan Akun Administrator Bawaan.

Kesalahan: Parameter input VMName tidak cocok dengan mesin virtual mana pun.

Pesan kesalahan:

Enter-PSSession : Parameter VMName input tidak mengarah ke mesin virtual mana pun.

Potensi penyebab:

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

Gunakan cmdlet Get-VM untuk memeriksa apakah kredensial 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 Just Enough Administration (JEA).

Lihat sampel di GitHub.