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.

vCenter Reboot

vCenter Reboot

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.

Powershell output

Powershell output

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.

Bu blog yazısı Emre Bozlak tarafından paylaşılmıştır. Referans vererek istediğiniz gibi kullanabilirsiniz. Eğer bir sorunuz olursa eposta veya sosyal medya hesaplarım üzerinden bana ulaşabilirsiniz. Yazılarımı Twitter'dan @emrebozlak veya RSS üzerinden takip edebilirsiniz.

Leave a comment