6Sep
PowerShell'in sunduğu en iyi özelliklerden biri, Sunucularınızı uzaktan yönetebilmenizdir. Hatta aynı anda bir demet yönetmenize olanak tanır.
Serideki önceki makaleleri okuduğunuzdan emin olun:
- Windows'u PowerShell ile Otomatikleştirme Nasıl
- 'yi Öğrenin PowerShell'de Cmdlet Kullanmayı Öğrenme
- PowerShell'de Nesneleri Nasıl Kullanacağınızı Öğrenme
- PowerShell'de Biçimlendirme, Filtreleme ve Karşılaştırma Öğrenme
Ve bunun için hazırlıklı olmaya devam edin.serinin geri kalan kısmı bütün hafta.
Uzaktan Ne Var?
Sunucularınızın toplu yönetimi sıkıcı olabilir ve daha önce 50 web sunucusunda bir IIS yapılandırması değişikliği yapmak zorunda kaldıysanız, ne demek istediğimi anlayacaksınız. Bunlar, PowerShell Remoting ve dilin komut dosyası oluşturma yeteneklerinin kurtarmaya gelebileceği durumlardır. HTTP veya daha güvenli HTTPS kullanarak, PowerShell Remoting, şebekenizde uzaktaki bir makineye komutlar göndermenizi sağlar. Makine daha sonra komutları çalıştırır ve çıktıyı size geri gönderir ve bu da ekranınızda görüntülenir.
Teknik Alalım
Bilinen gibi, PowerShell Remoting'in temelinde tek bir Windows Hizmeti, Windows Uzaktan Yönetim veya WinRM hizmeti yer alır. WinRM'yi kullanarak, temel olarak uzak PowerShell örneğinize bağlanan kişiye sunmak istediğiniz deneyimle ilgili bilgi içeren dosyalardan oluşan bir veya daha fazla oturum yapılandırması( uç nokta olarak da bilinir) ayarlayabilirsiniz. Daha açık belirtmek gerekirse, oturum yapılandırma dosyalarını, örneğe kimin ve hangisinin bağlanamayacağını ve kimin bağlanamayacağını, hangi cmdlet'leri ve komut dosyalarını çalıştırabileceğini ve oturumun hangi güvenlik bağlamında çalıştırılması gerektiğini tanımlamak için kullanabilirsiniz. WinRM Hizmeti'ni kullanarak, gelen "PowerShell" isteklerini dinleyen "dinleyiciler" de kurarsınız. Bu "dinleyiciler" HTTP veya HTTPS olabilir ve makinenizde tek bir IP adresine bağlanabilir. Başka bir makineye PowerShell bağlantısı açtığınızda( teknik olarak HTTP'ye dayanan WS-MAN protokolü kullanılarak yapılır), bağlantı bu "dinleyiciler" ten birine bağlanır."Dinleyiciler" daha sonra trafiği uygun oturum yapılandırma dosyasıyla ilişkili uygulamaya göndermekten sorumludur;uygulama( normalde PowerShell ancak isterseniz diğer barındırma uygulamalarına sahip olabilirsiniz) daha sonra komutu çalıştırır ve sonuçları ağdaki "tekrarlayıcı" ya da makinenize geri gönderir.
Nasıl Yapacağınızı Göster
Yapmanız gereken ilk şey, bağlanmak istediğiniz Makine'de Uzaktan İşleme özelliğini etkinleştirmektir. Bu, aşağıdakileri çalıştırarak yapılabilir:
Enable-PSRemoting
Sonra tüm istemlere evet cevabı vermeniz gerekir. Enable-PSRemoting'i çalıştırdığınızda, PC'nizde birkaç değişiklik yapılır:
- WinRM Hizmeti başlatılır.
- WinRM Hizmeti, Manuel başlangıç modundan Otomatik moduna geçer.
- Tüm ağ kartlarına bağlı bir HTTP dinleyicisi oluşturur.
- Ayrıca WS-MAN protokolü için gelen güvenlik duvarı özel durumu oluşturur.
- Bazı varsayılan oturum yapılandırmaları oluşturulur
Windows 7 çalıştırıyorsanız ve ağ kartınızın konumu Ortak olarak ayarlanırsa, PowerShell Remoting'i etkinleştirmek başarısız olur. Bunu düzeltmek için, Ev veya İş ağının konumuna geçmeniz yeterlidir. Alternatif olarak, aşağıdakileri kullanarak ağ denetimini atlayabilirsiniz:
Etkinleştir-PSRemoting -SkipNetworkProfileCheck
Ancak, ağ konumunuzu değiştirmenizi öneririz.
PowerShell'i kullanarak başka bir makineye bağlanmak için iki yol vardır. SSH'yi kullanmaya çok benzeyen bire bir yöntem var, ve o zaman çok yönlü bir yöntem var.
PowerShell Oturumu Kullanma
PowerShell'i kullanarak uzaktaki bir makineye bağlanmanın ilk yolu, PowerShell Oturumu adı verilen bir şey kullanıyor. Basitçe söylemek gerekirse, bir oturumda, kendi makinenizde yapacağınız komutlarla uzaktaki makinedeki komutları etkileşimli bir biçimde kullanabilirsiniz. Bir oturum açmak için aşağıdakileri basitçe yazmanız yeterlidir:
Enter-PSSession - BilgisayarAdı "Darlah"
Komut isteminde, cmdlet'leri çalıştırdığınız makineyi belirten bir önek kazanılır.
Buradan, istemi gerçekten uzaktaki makineye oturmuş gibi davranabilirsiniz.Örneğin, C: \ sürücüsündeki tüm dosyaları görmek isterseniz, basit yapabilirsiniz:
Get-ChildItem -Path C: \
Bir Linux arka planından geliyorsanız, SSH'ye alternatif olarak PowerShell'in uzaktan çalışma yöntemini kullanarak düşünebilirsiniz.
Invoke-Komutu
'yi Kullanma PowerShell'i uzaktaki bir makinede kullanmanın ikinci yolu Invoke-Command'ı kullanmaktır. Invoke-Komutunu kullanmanın avantajı aynı komutu aynı anda birden fazla makinede çalıştırabilmenizdir. Tahmin edebileceğiniz gibi, sunuculardan olay günlükleri toplamak gibi bir şey yapmak istediğinizde bu özellikle yararlıdır. Invoke-Command aşağıdaki sözdizimini izlemektedir:
Invoke-Komutu -ComputerName Darlah, localhost -ScriptBlock{ Get-EventLog Uygulaması -Newest 2}
Komut tüm makinelerde paralel olarak çalıştırıldığı için, hangi PC'yi veverilen sonuç geldi. Bunu PSComputerName özelliğine bakarak yapabilirsiniz.
Invoke-Command'ı kullandığınızda, artık Boru Hattı'nda beklediğiniz nesneler yok. Görüyorsunuz, PowerShell'in uzaktaki makinedeki bilgileri makinenize geri getirmesi için, uzaktaki makine üzerinde çalıştırdığınız komutun çıktısını temsil etmenin bir yoluna ihtiyaç duyuyorlar. Hiyerarşik bir veri yapısını temsil etmek için seçilen yol, XML kullanmaktır; bu, Invoke-Command kullanılarak bir komut çıkardığınızda sonuçların ilk önce makinenize gönderilmeden önce XML'ye seri hale getirildiği anlamına gelir. Makinenize geri döndüklerinde, bir nesneye geri serilensiz hale getirilir;Çözülmüş haldeyken, nesnenin sahip olduğu ToString() yöntemi dışındaki tüm yöntemler uzaklaştırılmıştır.
Not: Bu kural için bazı istisnalar vardır, örneğin, tamsayılar gibi ilkel türler dahil edilen yöntemlerle deserialize edilebilir. Bazı yöntemlerin deserialize edilmiş nesnelere geri eklenebildiği Rehydration adlı bir süreç de vardır. Bu yüzden dikkatli olun ve Get-Member'in arkadaşınız olduğunu unutmayın.
Ödev
- Don Jones'un PowerShell Remoting e-kitaplarının Sırlarını okuyun.