- PowerShell uzak yönetimi nedir?
- Önce hazırlık: uzak makinede remoting etkinleştirme
- Temel kullanım biçimleri: etkileşimli, tek seferlik, kalıcı oturum
- Değişkenleri uzak makineye taşımak ve çıktıyı toplamak
- Güvenlik ve yetkilendirme
- Uzak yönetim sorunları nasıl giderilir?
- Sık yapılan hatalar
- Bu beceriyi Mindset programlarında nerede çalışırsınız?
- Sık sorulan sorular
PowerShell ile uzak sunucuları yönetmek: remoting kurulumu ve komutlar
PowerShell remoting ile uzak sunucu yönetimi: Enable-PSRemoting, Enter-PSSession, Invoke-Command, New-PSSession, güvenlik ve sorun giderme.
PowerShell uzak yönetimi nedir?
PowerShell uzak yönetimi (remoting), bir bilgisayardan bir ya da birçok uzak bilgisayarda PowerShell komutu çalıştırmanızı sağlar. Microsoft belgelerine göre Windows PowerShell WS-Management protokolü üzerinden uzak bilgisayarlarda herhangi bir komutu çalıştırabilir; kalıcı bağlantılar kurabilir, etkileşimli oturum açabilir ve uzak makinelerde betik çalıştırabilir. PowerShell ayrıca SSH üzerinden uzak yönetimi de destekler; bu seçenek Windows dışı sistemleri de kapsayan ortamlarda önem kazanır.
Pratik fark şudur: Her sunucuya uzak masaüstüyle girip aynı işi elle yapmak yerine komutu bir kez yazar, hedef listesine gönderirsiniz. Sonuçlar nesne olarak yerel bilgisayarınıza döner ve orada filtrelenebilir, sıralanabilir, dosyaya yazılabilir.
Uzak yönetim özellikle şu işlerde değer üretir: onlarca sunucuda hizmet durumunu kontrol etmek, güncelleme durumunu toplamak, yapılandırma ayarını tek komutla dağıtmak, olay kaydı taramak ve rutin bakım betiğini toplu çalıştırmak.
Önce hazırlık: uzak makinede remoting etkinleştirme
Uzak yönetimde komutu alan bilgisayarın yapılandırılmış olması gerekir. Belgelerde anlatıldığı gibi Enable-PSRemoting komutu bilgisayarı WS-Management teknolojisiyle gelen PowerShell komutlarını alacak şekilde ayarlar: WinRM hizmetini başlatır, başlangıç türünü otomatik yapar, dinleyici oluşturur, güvenlik duvarında WS-Management için istisna açar ve oturum yapılandırmalarını etkinleştirir.
Önemli ayrıntılar:
- Bu komut yönetici olarak çalıştırılan bir PowerShell oturumunda çalıştırılır.
- Belgelere göre Windows sunucu sürümlerinde uzak yönetim varsayılan olarak etkindir. İstemci Windows sürümlerinde ve yeniden etkinleştirme gerektiğinde komut kullanılır.
- Komut yalnızca komut alacak bilgisayarda gerekir; komut gönderen bilgisayarda çalıştırmak şart değildir.
- İstemci Windows'ta bilgisayar herkese açık (public) ağdaysa etkinleştirme normalde engellenir; SkipNetworkProfileCheck parametresiyle bu kısıt aşılabilir ama güvenlik açısından bilinçli karar gerektirir.
- Komut dinleyici başlattığı için gereksiz bilgisayarlarda etkinleştirmemek akıllıca olur.
Kurumsal ortamlarda bu ayar çoğunlukla grup ilkesiyle ya da yapılandırma yönetimi araçlarıyla merkezi dağıtılır. Güvenlik ekibinizin onayı ve ağ güvenlik duvarı kuralları süreç için önkoşuldur.
Temel kullanım biçimleri: etkileşimli, tek seferlik, kalıcı oturum
Belgelerdeki temel kullanım biçimleri şunlardır.
Etkileşimli oturum: Tek bir uzak bilgisayarda sanki başında çalışıyormuş gibi komut yazmak için Enter-PSSession kullanılır.
Enter-PSSession SUNUCU-A
Komut satırı uzak bilgisayarın adını gösterir; yazdığınız komutlar orada çalışır, sonuçlar size döner. Oturumdan çıkmak için Exit-PSSession yazılır. Kısa teşhis ve el ile bakım için uygundur.
Tek seferlik komut: Bir ya da birçok bilgisayarda bir komutu çalıştırıp sonucu almak için Invoke-Command kullanılır.
Invoke-Command -ComputerName SUNUCU-A, SUNUCU-B -ScriptBlock { Get-Service }
Sonuç, hangi bilgisayardan geldiğini gösteren PSComputerName özelliğiyle yerel bilgisayara döner. Bu, toplu işlerin ana aracıdır.
Betik dosyası çalıştırma: Yerel bilgisayarınızdaki bir betiği uzak bilgisayarlarda çalıştırmak için FilePath parametresi kullanılır. Betiğin yerelde erişilebilir olması yeterlidir.
Kalıcı oturum: New-PSSession ile bir bağlantı kurup nesnesini değişkende saklarsınız; sonraki komutlar aynı oturumda çalışır.
$oturum = New-PSSession -ComputerName SUNUCU-A, SUNUCU-B Invoke-Command -Session $oturum -ScriptBlock { $guncellemeler = Get-HotFix } Invoke-Command -Session $oturum -ScriptBlock { $guncellemeler | Where-Object { $_.InstalledBy -ne "NT AUTHORITY\SYSTEM" } }
Belgeler, bu örnekte değişkenin uzak oturumda oluştuğunu ve yerel oturumda bulunmadığını vurgular. Kalıcı oturum, bir komutun sonucunu sonraki komutta kullanmanız gerektiğinde veya her seferinde yeniden bağlanma maliyetinden kaçınmak istediğinizde tercih edilir.
Değişkenleri uzak makineye taşımak ve çıktıyı toplamak
Uzak komut bloğu ayrı bir oturumda çalıştığı için yerel değişkenleriniz orada tanımlı değildir. Yerel değeri kullanmak için komuta argüman olarak geçirmeniz gerekir; Invoke-Command, ArgumentList parametresiyle bunu destekler. Blok içinde param ile alınır:
$hizmetAdi = "Spooler" Invoke-Command -ComputerName SUNUCU-A -ArgumentList $hizmetAdi -ScriptBlock { param($ad) Get-Service -Name $ad }
Uzak komutların çıktısı, serileştirilmiş nesne olarak size döner. Bu nesneler çoğu özelliği taşır, fakat yöntemleri (metodları) taşımaz. Dönen nesne üzerinde yöntem çağırmak gerekiyorsa işlemi uzak blok içinde yapın.
Çıktıyı toplarken PSComputerName özelliğini kullanarak sonuçları sunucuya göre gruplayın ve tek bir CSV raporuna dönüştürün. Büyük sunucu listelerinde sonuç yerine yalnızca ihtiyacınız olan alanları döndürmek ağ yükünü ve işlem süresini azaltır.
Uzak hata yönetimi de önemlidir. Erişilemeyen bir sunucu, toplu çalıştırmayı durdurmamalı; hata kaydı alınmalı ve bir sonraki sunucuya geçilmelidir. Bunun için hatayı yakalamayı anlatan fonksiyon ve hata yönetimi sayfasındaki yaklaşımlar burada da geçerlidir.
Güvenlik ve yetkilendirme
Uzak yönetim güçlü bir araçtır; yanlış yapılandırıldığında saldırı yüzeyini genişletir.
- En az yetki ilkesi: Uzak komutu çalıştıran hesabın yalnızca gereken yetkiye sahip olduğundan emin olun. Her işlem için alan yöneticisi hesabı kullanmak yanlıştır.
- Erişimi sınırlayın: Remoting'i yalnızca yönetim ağından gelen bağlantılara açacak güvenlik duvarı kuralları tanımlayın. Belgeler, public ağlarda varsayılan olarak yerel alt ağ kısıtı uygulandığını belirtir.
- Kimlik bilgilerini betiğe yazmayın: Parolaları düz metin olarak betikte ya da depoda tutmayın. Kurumsal gizli yönetim aracı veya güvenli kimlik bilgisi saklama yöntemleri kullanın.
- Kısıtlı oturum yapılandırmaları: Belgelerde, özelleştirilmiş ve kısıtlı oturumlar oluşturma imkânı anılır. Yalnızca belirli komutların çalıştırılabildiği yapılandırmalar, yetki devri için uygundur.
- Kayıt tutun: Uzak komut çalıştıran betiğin kim tarafından, ne zaman, hangi hedefte çalıştırıldığı kaydedilmelidir.
- Oturumları kapatın: Kalıcı oturumlar işiniz bittiğinde kapatılmalıdır; açık bırakılan oturum kaynak tüketir.
- Etki alanı dışı ve farklı güven sınırlarındaki bilgisayarlarda ek kimlik doğrulama yapılandırması gerekebilir; bunu güvenlik ekibiyle birlikte ve resmî belgeye bakarak yapın.
Uzak yönetimin sıkı güvenlik denetiminden geçmesi, özellikle düzenlemeye tabi sektörlerde kaçınılmaz bir gerekliliktir.
Uzak yönetim sorunları nasıl giderilir?
Bağlantı kurulamadığında şu sırayla ilerleyin.
Ad çözümlemesi: Hedef bilgisayarın adı doğru çözülüyor mu? Yanlış yazılmış ya da DNS kaydı olmayan bir adla bağlantı kurulamaz.
Ağ erişimi: Hedef makineye ağ üzerinden ulaşılabiliyor mu? Test-Connection ile temel ulaşılabilirliği kontrol edin. Güvenlik duvarı WS-Management trafiğine izin veriyor mu?
Hedef yapılandırması: Uzak makinede remoting etkin mi? WinRM hizmeti çalışıyor mu? Etkin değilse Enable-PSRemoting yönetici yetkisiyle çalıştırılmalıdır.
Yetkilendirme: Kullandığınız hesap hedef makinede uzak yönetim izni taşıyor mu? Oturum yapılandırmalarında erişim izni tanımlıdır; hesabınızın bu gruba dahil olduğundan emin olun.
Sürüm uyumu: Yerel ve uzak makinedeki PowerShell sürümleri farklıysa bazı komutlar ya da modüller mevcut olmayabilir. Hangi PowerShell sürümüyle bağlandığınızı kontrol edin.
Microsoft, uzak bağlantı hatalarının teşhisi için ayrı bir yardım konusu (about_Remote_Troubleshooting) yayımlar; hata kodunu bu belgede aramak çoğu zaman çözümü gösterir.
Sık yapılan hatalar
- Remoting etkin olmayan makineye bağlanmaya çalışmak: İlk kontrol her zaman hedefte WS-Management dinleyicisinin etkin olmasıdır.
- Yerel değişkeni uzak blokta doğrudan kullanmak: Değişken orada tanımsız olur; argüman olarak geçirin.
- Dönen nesnelerde metot beklemek: Serileştirilmiş nesnelerde metot çalışmaz; işlemi uzak blokta yapın.
- Tüm sunuculara aynı anda kritik değişiklik göndermek: Önce küçük bir test grubunda deneyin, sonra genişletin.
- Hata yönetimi olmadan toplu çalıştırma: Bir sunucudaki hata, hangi sunucuların başarısız olduğunu belirsiz bırakır.
- Oturumları kapatmayı unutmak: Çok sayıda açık oturum kaynak tüketir.
- Parolayı betiğe gömmek: Güvenlik açığıdır; gizli yönetimi kullanın.
- Her şey için yönetici hesabı kullanmak: Yetkiyi göreve göre daraltın.
Bu beceriyi Mindset programlarında nerede çalışırsınız?
PowerShell ile Windows Otomasyonu eğitimi, çok sayıda Windows sunucusunu elle yönetmekten kurtulmak isteyen sistem yöneticileri ve altyapı ekipleri için uygundur. Programın uzak yönetim ve güvenlik modülü, bu sayfadaki konuyu doğrudan işler; öncesindeki fonksiyon yazımı ve hata yönetimi modülü ise toplu çalıştırmada sağlam betik yazmanın temelini verir.
Programın sonundaki modül paketleme, zamanlama ve proje bölümü, uzak yönetim betiklerini ekip çapında paylaşılabilir ve zamanlanmış bir çözüm haline getirmeyi hedefler. Kurumsal BT ekipleri, bu akışla rutin sunucu bakım işlerini bir betik kütüphanesine dönüştürebilir.
İlgili Mindset programı
PowerShell ile Windows Otomasyonu
Sık sorulan sorular
PowerShell remoting hangi protokolü kullanır?
Microsoft belgelerine göre Windows PowerShell uzak yönetimi WS-Management protokolünü kullanır; PowerShell ayrıca WMI ve SSH üzerinden uzak yönetimi de destekler. WS-Management tabanlı remoting yalnızca Windows platformunda desteklenir, SSH tabanlı yöntem ise Windows dışı sistemleri de kapsar.
Enter-PSSession ile Invoke-Command arasındaki fark nedir?
Enter-PSSession, tek bir uzak bilgisayarda etkileşimli komut satırı açar ve elle çalışmak için uygundur. Invoke-Command ise bir komutu ya da betiği bir veya birçok bilgisayarda çalıştırıp sonucu yerel bilgisayara getirir. Toplu ve otomatik işler için Invoke-Command kullanılır.
Her sunucuda remoting'i etkinleştirmem gerekir mi?
Yalnızca komut alacak bilgisayarlarda gerekir; komut gönderen bilgisayarda şart değildir. Belgelere göre Windows sunucu sürümlerinde uzak yönetim varsayılan olarak etkindir. İstemci Windows'ta etkinleştirme yönetici yetkisiyle yapılır. Gereksiz makinelerde dinleyici açmamak güvenlik açısından önerilir.
Uzak komutun çıktısı neden nesne gibi davranmıyor?
Uzak komutların çıktısı serileştirilir ve yerel bilgisayarda yeniden oluşturulur. Özellikler korunur ama yöntemler genellikle taşınmaz. Nesneye ait bir yöntemi çağırmanız gerekiyorsa işlemi uzak komut bloğunun içinde yapın ve yalnızca sonucu döndürün.
Uzak yönetim yerine neden betiği doğrudan sunucuya kopyalayıp çalıştırmıyorum?
Uzak yönetim, betiği her sunucuya kopyalamadan, merkezi bir yerden çalıştırmayı ve sonuçları tek yerde toplamayı sağlar. Kopyalama yöntemi sürümleme, yetki ve kayıt sorunları doğurur. Invoke-Command'in FilePath parametresi yerel betiği doğrudan uzak makinelerde çalıştırabilir.
İlgili rehberler
Kategori: Yazılım Geliştirme