vCenter Servisini Powershell Yardımıyla Reboot Etmek
Arada bir vCenter servisinin uzaktan ve sunucuya giriş yetkisi olmayan kişiler tarafından yeniden başlatılması gerekebilir(backup veya storage ekipleri buna güzel birer örnektir).Peki bu kişilere sunucuya giriş yetkisi vermeden bu işlemi nasıl yerine getirebiliriz?
Ben System Center Orchestrator’u ve Powershell kullanarak bir adet runbook geliştirdim. Eğer aşağıda ki ekran görüntüsüne bakarsanız oldukça basit olduğunu anlayabilirsiniz. Temelde yaptığı şey; belli bir eposta kutusunu düzenli olarak kontrol ediyorum ve gelen epostalar içerisinde doğru başlık ve içerikle bir eposta varsa; runbook eposta içerisindeki parametrelere göre çalışmaya başlıyor.
Eposta kutusunu monitör etmek için aşağıda ki integration pack’i kullandım.Kurulumu ve kullanımı çok kolaydır.
http://scorch.codeplex.com/releases/view/87100
Runbook’u incelediğinizde “Restart VC” isimli bir “Run Program” aktivitesi dikkatinizi çekecektir.Direk powershell kullanmak yerine bu şekilde bir yöntemle powershell scriptini çalışmamın bir sebebi var. Orchestrator’un çalıştığı servis kullanıcısının da vCenter sunucusunda yetkisi yok bu yüzden başka bir yazımda bahsettiğim yöntemi kullandım.
vCenter servisini yeniden başlatacak Powershell scriptine gelirsek burada da bazı noktalara dikkatinizi çekmek istiyorum. İlk satıra bakarsanız vCenter’ın hostname’ini bir parametre olarak dışarıdan alıyoruz. Eğer birden fazla vCenter’ınız varsa sizinde böyle yapmanızı öneririm.
İkinci önemli noktaysa vCenter servisine bağımlı birden fazla servisiniz olabilir(SRM gibi) bu durumda önce bu servisleri kapatmanız ardından vCenter’ı yeniden başlamanızı öneririm.
$vc = $args[0] //vCenter hostname’i $services = @() //Services isimli bir array oluşturup vcenter ve bağımlı servisleri burada tutacağız $services += (Get-Service -ComputerName $vc -Name vpxd).Name (Get-Service -ComputerName $vc -Name vpxd).DependentServices | ForEach-Object { $services += $_.Name //vcenter’a bağımlı çalışan servisleri burada array içerisine atıyoruz } $services | Sort-Object | ForEach-Object { (Get-Service -ComputerName $vc -Name $_ ) | Stop-Service –Force //Services array’inde ki servisleri kapatıyoruz sleep 5 } sleep 5 $services | Sort-Object -Descending | ForEach-Object { (Get-Service -ComputerName $vc -Name $_ ) | Start-Service } exit
Scripti çalıştırdığınız zaman aşağıda ki gibi bir çıktı verecektir. Servis sayınız ve sunucu yüküne göre burada ki çıktının uzunluğu ve içeriği değişebilir.
Yazımı bitirmeden küçük bir noktaya dikkat çekmek istiyorum. vCenter’î kapatırken önce ona bağımlı servisleri kapatmalı, açarken de önce vCenter’ı sonra bağımlı servisleri açmamız gerekiyor.
Bundan dolayıdır ki servisleri açarken “Sort-Object -Descending” kullandık.