Havayolu şirketleri gibi kritik sistemlerde çalışan ortamlarda, sunucular üzerindeki hizmetlerin sürekli olarak izlenmesi hayati öneme...
Havayolu şirketleri gibi kritik sistemlerde çalışan ortamlarda, sunucular üzerindeki hizmetlerin sürekli olarak izlenmesi hayati öneme sahiptir. Herhangi bir hizmetin durması veya bağlantı hatası, uçuş planlaması, rezervasyon sistemi veya güvenlik süreçlerini doğrudan etkileyebilir. Bu yazıda, Get-Service cmdlet'i ve try-catch hata işleme yapısı kullanılarak, havayolu şirketinin birden fazla Windows sunucusunda belirli bir hizmetin durumunu güvenli bir şekilde kontrol eden PowerShell betiği nasıl yazılır?Neden Get-Service ve try-catch?
Bu senaryo için önerilen yaklaşımın temel gerekçeleri şunlardır:A. Get-Service Cmdlet'i: Doğal ve Basit Çözüm
- Get-Service, Windows hizmetlerini sorgulamak için doğrudan tasarlanmıştır.
- Komut satırında Get-Service -Name "Spooler" gibi basit bir komutla hizmetin durumu (Running, Stopped, vb.) alınabilir.
- Uzak sunucularda çalıştırılabilmesi için Invoke-Command ile birlikte kullanılabilir.
B. try-catch: Bağlantı Hatalarını Yakalama ve Yönetme
Uzak sunuculara bağlantı sırasında şu hatalar oluşabilir:- Sunucu kapalı veya erişilemez.
- Hizmet adı yanlış veya mevcut değil.
- Yetkilendirme sorunları (örneğin, erişim reddedildi).
Uzak Sunucularda Hizmet Durumu Kontrolü
# İzlenecek sunucular ve hizmet adı $servers = "Server01", "Server02", "Server03" $serviceName = "FlightScheduler" foreach ($server in $servers) { try { # Uzak sunucuda hizmet durumunu sorgula $service = Invoke-Command -ComputerName $server -ScriptBlock { Get-Service -Name $using:serviceName -ErrorAction Stop } -ErrorAction Stop # Hizmet durumunu kontrol et if ($service.Status -eq "Running") { Write-Host "$server üzerinde $serviceName hizmeti aktif." -ForegroundColor Green } else { Write-Host "$server üzerinde $serviceName hizmeti durmuş!" -ForegroundColor Red # Alternatif işlem (örneğin, uyarı e-postası gönderme) Send-MailMessage -To "admin@airline.com" -From "monitor@airline.com" ` -Subject "Uyarı: Hizmet Durduruldu - $server" ` -Body "$serviceName hizmeti $server üzerinde çalışmıyor!" ` -SmtpServer "smtp.airline.com" } } catch { # Bağlantı veya hata durumlarını yakala Write-Host "$server üzerinde hizmet kontrolü başarısız: $($_.Exception.Message)" -ForegroundColor Yellow # Kritik hataları logla Write-EventLog -LogName "Application" -Source "ServiceMonitor" ` -EntryType Error -EventID 5001 ` -Message "Sunucu: $server | Hata: $($_.Exception.Message)" } } A. Invoke-Command ile Uzak Sunucu Erişimi
Invoke-Commandcmdlet'i, uzak sunucularda komut çalıştırmanızı sağlar.-ComputerNameparametresiyle hedef sunucu belirlenir.using:değişkeni, yerel değişkenleri uzak komut bloğuna aktarır.
B. -ErrorAction Stop ile İstisna Tetikleme
Get-Service, hizmet bulunamadığında varsayılan olarak hata vermez (non-terminating error).-ErrorAction Stopile bu tür hatalar istisna olarak tetiklenir vecatchbloğu tarafından yakalanabilir.
C. Send-MailMessage ile Uyarı Bildirimi
- Hizmet durduğunda e-posta ile bildirim gönderilir.
- Bu, IT ekibine hızlı müdahale imkanı sunar.
D. Write-EventLog ile Hata Kaydı
- Kritik hatalar Windows Olay Günlüğüne yazılır.
- Bu loglar, ileride analiz için saklanabilir.
- A. Güvenli Bağlantılar:
Invoke-Commandiçin PowerShell Remoting (WinRM) yapılandırması yapılmalıdır.- Güvenli protokoller (örneğin HTTPS) kullanın.
- B. Sıkışık Ağları Dikkate Alın:
-ThrottleLimitparametresiyle aynı anda kaç sunucuya bağlanılacağını sınırlayın.
- C. Hata Mesajlarını Özelleştirin:
- Kullanıcıya anlamlı bilgiler verin (örneğin,
"Hizmet bulunamadı"yerine"FlightScheduler hizmeti Server01'de yok").
- Kullanıcıya anlamlı bilgiler verin (örneğin,
- D. Düzenli Test Edin:
- Sunucular kapalı olduğunda betiğin nasıl davranacağını test edin.
Bu betik, havayolu şirketinin sunucularındaki kritik hizmetlerin izlenmesi için güvenilir bir çözüm sunar. Get-Service ve try-catch kombinasyonu, hem basit hem de güçlüdür. Özellikle bağlantı hatalarını yönetebilme ve özel uyarılar tanımlayabilme özellikleri, havayolu sektöründe kesintisiz hizmet sunulmasını sağlar. Betiği Zamanlanmış Görev (Task Scheduler) ile otomatikleştirerek her X dakikada bir çalıştırabilirsiniz.HataAçıklamaÇözümAccess is deniedYetki eksikliğiBetiği yönetici haklarıyla çalıştırın veyaEnter-PSSessionile kimlik doğrulaması yapın.The RPC server is unavailableSunucuya erişilemiyorAğ bağlantısını kontrol edin veya-ThrottleLimitazaltın.Service does not existHizmet adı yanlışGet-Servicekomutunu doğrulayın.
- Sunucular kapalı olduğunda betiğin nasıl davranacağını test edin.