Aracılığıyla paylaş


PowerShell kullanarak sanal makine otomasyonu ve yönetimi

PowerShell Direct'i kullanarak windows 10 veya üzeri veya Windows Server 2016 ya da daha yeni bir sanal makinede Hyper-V konağınızdan rastgele PowerShell çalıştırabilirsiniz. Ağ yapılandırmasından veya uzaktan yönetim ayarlarından bağımsız olarak PowerShell Direct'i kullanın.

PowerShell Direct'i çalıştırmanın bazı yolları şunlardır:

Gereksinimler

İşletim sistemi gereksinimleri:

  • Konak: Hyper-V çalıştıran Windows 10, Windows Server 2016 veya üzeri.
  • Konuk/Sanal Makine: Windows 10, Windows Server 2016 veya üzeri.

Eski sanal makineleri yönetiyorsanız, Sanal Makine Bağlantısı (VMConnect) kullanın veya bir ağ bağlantısı üzerinden bağlanın.

Yapılandırma gereksinimleri:

  • Sanal makinenin ana bilgisayarda yerel olarak çalışması gerekir.
  • Sanal makinenin en az bir yapılandırılmış kullanıcı profiliyle açık ve çalışır durumda olması gerekir.
  • Ana bilgisayarda Hyper-V yöneticisi olarak oturum açmış olmanız gerekir.
  • Sanal makine için geçerli kullanıcı kimlik bilgileri sağlamanız gerekir.

Etkileşimli bir PowerShell oturumu oluşturma ve oturumdan çıkma

PowerShell komutlarını sanal makinede çalıştırmanın en kolay yolu etkileşimli bir oturum başlatmaktır.

Oturum başladığında, yazdığınız komutlar sanal makinede, sanal makinenin kendisinde bir PowerShell oturumuna doğrudan yazdığınız gibi çalışır.

Etkileşimli oturum başlatmak için:

  1. Hyper-V ana bilgisayarında PowerShell'i Yönetici olarak açın.

  2. Sanal makine adını veya GUID'yi kullanarak etkileşimli bir oturum oluşturmak için aşağıdaki komutlardan birini çalıştırın:

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

    İstendiğinde sanal makinenin kimlik bilgilerini girin.

  3. Sanal makinenizde komutları çalıştırın. PowerShell isteminizin ön eki olarak VMName değerini aşağıdaki gibi görmeniz gerekir:

    [VMName]: PS C:\>
    

    Çalıştırdığınız tüm komutlar sanal makinenizde yürütülür. Bu komutların sanal makinede çalıştığından emin olmak için ipconfig veya hostname komutunu test edin.

  4. İşiniz bittiğinde, oturumu kapatmak için aşağıdaki komutu çalıştırın:

     Exit-PSSession 
    

Uyarı

Oturumunuz bağlanamıyorsa olası nedenler için sorun giderme bölümüne bakın.

Bu cmdlet'ler hakkında daha fazla bilgi edinmek için bkz. Enter-PSSession ve Exit-PSSession.

Invoke-Command ile betik veya komut çalıştırma

Invoke-Command ile PowerShell Direct, sanal makinede bir komut veya betik çalıştırmanız gereken ancak bu noktadan sonra sanal makineyle etkileşime devam etmeniz gerekmeyen durumlar için mükemmeldir.

Tek bir komut çalıştırmak için:

  1. Hyper-V ana bilgisayarında PowerShell'i Yönetici olarak açın.

  2. Sanal makine adını veya GUID'yi kullanarak oturum oluşturmak için aşağıdaki komutlardan birini çalıştırın:

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

    İstendiğinde sanal makinenin kimlik bilgilerini girin.

    komutu sanal makinede çalışır. Komut çıktı oluşturuyorsa konsolunuzda görürsünüz. Komut çalıştırılır çalıştırılmaz bağlantı otomatik olarak kapatılır.

Betiği çalıştırmak için:

  1. Hyper-V ana bilgisayarında PowerShell'i Yönetici olarak açın.

  2. Sanal makine adını veya GUID'yi kullanarak oturum oluşturmak için aşağıdaki komutlardan birini çalıştırın:

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

    İstendiğinde sanal makinenin kimlik bilgilerini girin.

    Betik sanal makinede çalışır. Komut çalıştırılır çalıştırılmaz bağlantı otomatik olarak kapatılır.

Bu cmdlet hakkında daha fazla bilgi için bkz. Invoke-Command.

dosyaları New-PSSession ve Copy-Item ile kopyalama

Uyarı

PowerShell Direct yalnızca Windows 14280 ve sonraki derlemelerde kalıcı oturumları destekler

Kalıcı PowerShell oturumları, bir veya daha fazla uzak makinede eylemleri koordine eden betikler yazarken son derece kullanışlıdır. Oluşturulduktan sonra, siz silmeye karar verinceye kadar arka planda kalıcı oturumlar bulunur. Bu, kimlik bilgilerini geçirerek veya Invoke-Command geçirmeden aynı oturuma tekrar tekrar Enter-PSSession başvurabileceğiniz anlamına gelir.

Aynı belirteçle oturumlar durumu tutar. Kalıcı oturumlar devam ettiğinden, oturumda oluşturduğunuz veya oturuma geçirdiğiniz tüm değişkenler birden çok çağrıda korunur. Kalıcı oturumlarla çalışmak için bir dizi araç kullanabilirsiniz. Bu örnek için New-PSSession ve Copy-Item kullanarak verileri konaktan sanal makineye ve bir sanal makineden konağa taşıyın.

Oturum oluşturmak için dosyaları kopyalayın:

  1. Hyper-V ana bilgisayarında PowerShell'i Yönetici olarak açın.

  2. kullanarak New-PSSessionsanal makinede kalıcı bir PowerShell oturumu oluşturmak için aşağıdaki komutlardan birini çalıştırın.

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

    İstendiğinde sanal makinenin kimlik bilgilerini girin.

    Uyarı

    14500 öncesi derlemelerde bir hata var. Kimlik bilgilerini -Credential bayrağı ile açıkça belirtmezseniz, konuktaki servis kilitlenir ve yeniden başlatılması gerekir. Bu sorunla karşılaşırsanız geçici çözüm yönergeleri için Hata: Uzak oturum sona ermiş olabilir bölümüne bakın.

  3. Sanal makineye bir dosya kopyalayın.

    Konak makineden sanal makineye kopyalamak C:\host_path\data.txt için şunu çalıştırın:

    Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
    
  4. Sanal makineden bir dosya kopyalayın (konakta).

    Sanal makineden konağa kopyalamak C:\guest_path\data.txt için şunu çalıştırın:

    Copy-Item -FromSession $s -Path C:\guest_path\data.txt -Destination C:\host_path\
    
  5. Remove-PSSession kullanarak sürekli oturumu durdurun.

    Remove-PSSession $s
    

Sorun giderme

PowerShell Direct, küçük bir ortak hata iletileri kümesini ortaya çıkartır. Aşağıdaki bölümlerde en yaygın hata iletileri, bazı nedenler ve sorunları tanılamaya yönelik araçlar açıklanmaktadır.

-VMName veya -VMID parametreleri yok

Sorun:

Enter-PSSession, Invoke-Commandveya New-PSSession parametresi -VMName-VMId yoktur.

Olası nedenler:

En olası sorun, ana bilgisayar işletim sisteminizin PowerShell Direct'i desteklememesidir.

Aşağıdaki komutu çalıştırarak Windows derlemenizi de kontrol edebilirsiniz:

[System.Environment]::OSVersion.Version

Desteklenen bir derleme çalıştırıyorsanız PowerShell sürümünüz PowerShell Direct'i desteklemez. PowerShell Direct ve JEA için ana sürüm 5 veya üzeri olmalıdır.

Aşağıdaki komutu çalıştırarak PowerShell sürüm derlemenizi de kontrol edebilirsiniz:

$PSVersionTable.PSVersion

Hata: Uzak oturum sona ermiş olabilir

Uyarı

Enter-PSSession, 10240 ve 12400 arasındaki konak derlemeleri için tüm hatalar "Uzak oturum sona ermiş olabilir" şeklinde raporlanır.

Hata mesajı:

Enter-PSSession: Windows PowerShell'in işleyemediği bir hata oluştu. Uzak oturum sona ermiş olabilir.

Olası nedenler:

  • Sanal makine var ancak çalışmıyor.
  • Konuk işletim sistemi PowerShell Direct'i desteklemez. Bkz . gereksinimler.
  • PowerShell henüz konukta kullanılamıyor
    • İşletim sisteminin önyüklemesi tamamlanmamış
    • İşletim sistemi düzgün önyüklenemiyor
    • Bazı önyükleme zamanı olaylarının kullanıcı girişi gerekiyor

Konakta hangi VM'lerin çalıştığını denetlemek için Get-VM cmdlet'ini kullanın.

Hata mesajı:

New-PSSession: Windows PowerShell'in işleyememe hatası oluştu. Uzak oturum sona ermiş olabilir.

Olası nedenler:

  • Daha önce listelenen nedenlerden biri, hepsi için geçerlidir New-PSSession
  • Geçerli derlemelerde -Credential ile kimlik bilgilerini açıkça geçirmeniz gereken bir hata. Bu hata oluştuğunda, tüm hizmet konuk işletim sisteminde kilitleniyor ve yeniden başlatılması gerekiyor. Oturumun Hala Enter-PSSession ile kullanılabilir olup olmadığını de kontrol edebilirsiniz.

Kimlik bilgisi sorununu geçici olarak çözmek için VMConnect kullanarak sanal makinede oturum açın, PowerShell'i açın ve aşağıdaki PowerShell komutuyla vmicvmsession hizmetini yeniden başlatın:

Restart-Service -Name vmicvmsession

Hata: Parametre kümesi çözümlenemiyor

Hata mesajı:

Enter-PSSession: Parametre kümesi, belirtilen adlandırılmış parametreler kullanılarak çözümlenemez.

Olası nedenler:

  • Sanal makinelere bağlanırken kullanamazsınız -RunAsAdministrator .

    Bir Windows kapsayıcısına bağlanırken, -RunAsAdministrator bayrağı açık kimlik bilgileri olmadan Yönetici bağlantılarına izin verir. Sanal makineler konağa zımni yönetici erişimi vermediğinden, kimlik bilgilerini açıkça girmeniz gerekir.

Yönetici kimlik bilgilerini sanal makineye -Credential parametresi ile veya istendiğinde manuel olarak girerek geçirebilirsiniz.

Hata: Kimlik bilgisi geçersiz

Hata mesajı:

Enter-PSSession: Kimlik bilgisi geçersiz.

Olası nedenler:

Hata: Giriş VMName parametresi hiçbir sanal makineye çözümlenmiyor.

Hata mesajı:

Enter-PSSession: Girdi VMName parametresi hiçbir sanal makineyle eşleşmiyor.

Olası nedenler:

  • Hyper-V Yöneticisi değilsiniz.
  • Sanal makine yok.

Kullandığınız kimlik bilgilerinin Hyper-V yönetici rolüne sahip olup olmadığını denetlemek ve konakta yerel olarak çalıştırılan ve önyüklenen VM'leri görmek için Get-VM cmdlet'ini kullanın.

Örnekler ve kullanıcı kılavuzları

PowerShell Direct, Yeterli Yönetimi (JEA) destekler.

GitHub'da örneklere göz atın.