PowerShell Direct Nedir, Nasıl Kullanılır?

01.10.2015 | 20:23 Hyper-V , PowerShell 1 Yorum

PowerShell Direct pek tabii bir yenilik, ama özellikten ziyade VM’ler içerisinde PowerShell komutları çalıştırmak için yeni bir yol demek daha doğru olur sanırım. Windows Server 2016 Hyper-V, Windows 10 Hyper-V ve PowerShell 5.0 ile birlikte kullanılabilen PowerShell Direct yöntemi, Hyper-V Host’lar üzerinden VM’ler içerisinde PowerShell komutları çalıştırmanızı sağlayan yeni bir yol sağlıyor.

PowerShell Direct öncesinde, bir Windows VM’i ağa bağlayıp Remote Management ayarlarını yaptıktan ve Windows Firewall üzerinde gerekli kuralları aktif ettikten sonra Enter-PSSession olsun, Invoke-Command olsun çeşitli cmdlet’lerin -ComputerName parametresine ağa bağlı uzak bilgisayarı vererek üzerinde bir komut çalıştırabilir veya bir komut satırı oturumu başlatabilirsiniz. Bu modelde uzak bilgisayarın bir VM veya Physical Server olmasının da pek bir önemi yoktur çünkü iletişim ağ bağlantısı kanalıyla kurulur. Bu yüzden üzerinden ilk kural, üzerinde komut çalıştırılmak istenen uzak bilgisayarın ağa bağlı ve ulaşılabiliyor olması…

Mesela aşağıda iki örnek var. Dikkat ederseniz uzak sunucu ismi -ComputerName parametresi ile sağlanıyor.

# Server1 isimli uzak sunucuda çalışan process’lerin bir listesini alır
Invoke-Command -ComputerName Server1 -ScriptBlock{Get-Process}

# Server1 isimli uzak sunucuda bir PS oturumu başlatır
Enter-PSSession -ComputerName Server1

Powershell Direct sayesinde, PowerShell 5.0’daki bazı cmdlet’lere eklenen -VMName veya -VMGuid parametreleri ile mesela bir Hyper-V Host üzerinde çalışan ama üzerinde hiçbir Remote Management ayarı gerçekleştirilmemiş veya hiçbir şekilde ağa bağlı olmayan (hatta ağ adaptörü bile bulunmayan) bir VM’in sanal işletim sistemi içerisinde komutlar çalıştırabilirsiniz; adı gibi, direkt!

# VM1 isimli sanal makinede çalışan process’lerin bir listesini alır
Invoke-Command -VMName VM1 -ScriptBlock{Get-Process}

# VM1 isimli sanal makinede bir PS oturumu başlatır
Enter-PSSession -ComputerName VM1

Windows Server 2016 Hyper-V Host üzerinden WS16-Core isimli VM için çalıştırdığım komutların ekran çıktılarını aşağıda görebilirsiniz.

powershell-direct-hyperv-invoke

powershell-direct-hyperv-pssession

PowerShell Direct Kullanımı İçin Gerekenler:

Host üzerinden VM’e bağlı bir PowerShell Direct oturumu başlatmak veya bir komut çalıştırmak için sağlanması gereken ön gereksinimleri aşağıda listeledim.

  • VM, ilgili Hyper-V Host üzerinde ve başlamış durumda olmalı.
  • Host üzerinde Hyper-V Administrator yetkilerinde bir hesapla oturum açılmalı. Mesela Host üzerinde yer alan sanal makineleri Get-VM ile listeleyebiliyorsanız yetkilisiniz demektir.
  • VM sanal işletim sisteminde (GuestOS) yetkili bir credentials bilgisi sağlanmalı.
  • Hyper-V Host sürümü en az Windows 10 veya Windows Server 2016 olmalı.
  • VM sanal işletim sistemi (GuestOS) en az Windows 10 veya Windows Server 2016 olmalı.

PowerShell Direct’in bir benzerini yani VM ağa bağlı olmasa da içerisinde bir şeyler yapabile kabiliyetini mesela Copy-VM ve Enable-VMIntegrationService cmdlet’lerinde de görmüştük. Ama PowerShell Direct bu konuda çok daha derinlere inmeyi başarıyor ve birçok sınırı ortadan kaldırıyor. Bu yeni yöntem özellikle otomasyon açısından çok değerli.

Örneğin Get-HypervReport’la ilgili en sık gelen bildirimlerden biri şu: “VM’lerin (yani GuestOS’lerin) de Volume size bilgilerini raporlasa süper olur”. Olur tabii ama bu bilgiyi ancak Host üzerindeki VM’lerin işletim sistemlerinden alabiliriz. Yani Script her bir VM’e ağ üzerinden ulaşabiliyor olmalı, her bir VM’in remote management ayarları hatasız olmalı, her bir VM’e authenticate olabilecek credentials’a sahip olmalı, vs. vs. Çoğu zaman tamamını aynı anda sağlamak pek mümkün olmuyor, bu yüzden işin çıktısı da etkisiz oluyor. Ama mesela bir sonraki sürümde PowerShell Direct ile en azından belirli sürüm VM’ler için bu bilgileri alıp rapora yerleştirmek kolay olur. Hatta todo list’e ekledim bile.

PowerShell Direct aslında servis sağlayıcılar için de biçilmiş kaftan olabilirdi ama VM için gerekli credentials bilgisini sağlamak bence hiç kolay olmaz :) Müşterinin credentials bilgisini istemek veya imajlara yetkili bir Windows hesabı yerleştirmek pek gerçekçi seçenekler değil, hatta güven zedeleyici bile olabilir. Bu yüzden şimdilik yapının tamamını yöneten ekiplere hitap ediyor diyebiliriz.

Diğer taraftan sadece Windows 10 ve Windows Server 2016 işletim sistemleri için kullanılabiliyor olması da bir sorun. Maalesef bu gibi özelliklerin doğasında var ve verim almak için yeni sürüm OS’lerin altyapıda yaygınlaşmasını beklemek gerekecek.

Geri kalan her şey güllük gülistanlık.

Yazı Etiketleri: , , , ,

Sayfa Başı ▲

Yorumlar (1)

  1. Kürşat ARI

    En azından Windows Server 2008 ve 2012 sürümlerine destek verebilirdi. Yada bir güncelleme ile bu sunucular powershell direct e dahil edilebilir.

Yorum Ekle