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 sanal makine için bir sanal ağ yapılandırın.

Yapılandırma gereksinimleri:

  • Sanal makinenin ev sahibi üzerinde yerel olarak çalışıyor olması 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 makine için kimlik bilgilerini sağlayın.

  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ırılan herhangi bir komut sanal makinenizde çalıştırılacaktır. Test etmek için, bu komutların sanal makinede çalıştığından emin olmak amacıyla ipconfig veya hostname komutunu çalıştırabilirsiniz.

  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ırın

Invoke-Command ile PowerShell Direct, bir sanal makinede bir komut veya betik çalıştırmanız gereken ancak bu noktadan sonra sanal makineyle etkileşime devam etmeniz gerekmediği 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 makine için kimlik bilgilerini sağlayın.

    Komut sanal makinede yürütülecek, eğer konsol çıktısı varsa, konsolunuza yazdırılacaktır. 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 makine için kimlik bilgilerini sağlayın.

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

Bu cmdlet hakkında daha fazla bilgi edinmek 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çirmeden Invoke-Command veya Enter-PSSession ile aynı oturuma tekrar tekrar başvurabileceğiniz anlamına gelir.

Benzer şekilde, oturumlar durumu tutar. Kalıcı oturumlar devam ettiğinden, oturumda oluşturulan veya oturuma geçirilen tüm değişkenler birden çok çağrıda korunur. Kalıcı oturumlarla çalışmak için kullanabileceğiniz çeşitli araçlar vardır. Bu örnekte New-PSSession ve Copy-Item kullanarak verileri konaktan sanal makineye ve bir sanal makineden konağa taşıyacağız.

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 makine için kimlik bilgilerini sağlayın.

    Uyarı

    14500 öncesi derlemelerde bir hata var. Kimlik bilgileri -Credential bayrağı ile açıkça belirtilmezse, konuktaki hizmet kilitlenir ve yeniden başlatılması gerekir. Bu sorunla karşılaşırsanız Hata : Uzak oturum sona ermiş olabilir bölümünde geçici çözüm yönergeleri sağlanır.

  3. Sanal makineye bir dosya kopyalayın.

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

    Copy-Item -ToSession $s -Path C:\host_path\data.txt -Destination C:\guest_path\
    
  4. Sanal makineden dosyayı ana bilgisayara kopyalayın.

    Sanal makineden konağa C:\guest_path\data.txt kopyalamak için şu komutu girin:

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

    Remove-PSSession $s
    

Sorun giderme

PowerShell Direct aracılığıyla ortaya çıkarılmış küçük bir ortak hata iletileri kümesi vardı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 bir -VMName veya -VMId parametresi yoktur.

Olası nedenler:

En olası sorun, PowerShell Direct'in ana bilgisayar işletim sisteminiz tarafından desteklenmediğidir.

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 çalıştırmayabilir. 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ı

Konak derlemeleri 10240 ile 12400 arasındaki Enter-PSSession için, aşağıdaki tüm hatalar "Uzak oturum sona ermiş olabilir" olarak belirtilmiştir.

Hata iletisi:

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. gereksinimleri.
  • 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 kullanabilirsiniz.

Hata iletisi:

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

Olası nedenler:

  • Yukarıda listelenen nedenlerden biri -- bunların tümü New-PSSession için eşit derecede geçerlidir.
  • Geçerli derlemelerde kimlik bilgilerinin açıkça -Credential ile aktarılması gereken bir hata. Bu durumda, 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'i kullanarak vmicvmsession hizmetini yeniden başlatın:

Restart-Service -Name vmicvmsession

Hata: Parametre kümesi çözümlenemiyor

Hata iletisi:

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

Olası nedenler:

  • -RunAsAdministrator sanal makinelere bağlanırken desteklenmez.

    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 bilgileri, sanal makineye -Credential parametresiyle girilerek veya istendiğinde el ile geçirilebilir.

Hata: Kimlik bilgisi geçersiz

Hata iletisi:

Enter-PSSession: Kimlik bilgisi geçersiz.

Olası nedenler:

  • Konuk kimlik bilgileri doğrulanamadı

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

Hata iletisi:

Enter-PSSession: Giriş VMName parametresi hiçbir sanal makineye çözümlenmez.

Olası nedenler:

  • Hyper-V Yöneticisi değilsin.
  • 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 kullanabilirsiniz.

Örnekler ve Kullanıcı Kılavuzları

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

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