Powershell

Azure’a Powershell İle VM Kurmak

Powershell ile Azure’da VM yaratmak hem kolay hem de gayet işlevseldir. Portal üzerinden ilk kurulum esnasında yapamadığınız birçok işlemi powershell yardımıyla yapabilirsiniz. Sunucu kurulmasını otomatikleştirmek veya self-service portalınız üzerinden kullanıcılarınızın Azure’da VM yaratmasını sağlayabilirsiniz.

Azure’da bulunan her VM’in bir bölgeye veya affinity group’a ait olması gerekmektedir. Eğer hesabınızda daha önceden bir affinity group tanımlanmışsa “Get-AzureAffinityGroup” komutunu kullanarak gruplarınızı görebilirsiniz. Aksi takdirde affinity group yaratmanızı tavsiye ederim,VM’leri direk veri merkezi belirterek kurabilseniz de zamanla sayı çoğaldıkça bazı karışıklıklar yaşayabiliyorsunuz;Affinity Group kaynak atanması,planlama ve network ayarlarını yaparken size toplu olarak servis ve VM’ler üzerinde işlem yapabilmenizi sağlayacaktır. VM’in sahip olması gereken ikinci özellikse servis adıdır. Affinity Group’da olduğu gibi “Get-AzureService” ile görebiliriz.Aynı şekilde bir birleriyle ilişki VM’leri aynı Azure servisi altında toplamanızı öneririm.

Continue reading

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.

Continue reading

Azure Endpoint’lerini Powershell Yardımıyla Nasıl Listelerim

Eğer Azure’da bir adet VM yaratıp, dashboard’una girerseniz “endpoint” denilen bir sekme dikkatinizi çekecektir. Basit bir şekilde acıkmak gerekirse endpoint Azure’da bulunan bir VM veya servisin dünyaya açıldığı nokta yani porttur. Bir VM üzerinde her hangi bir servis yarattığınız zaman bu servis ait olduğu network içerisinde veya S2S VPN ile bağlı bulunduğu yerdeki diğer sunucular tarafından rahatlıkla erişilebilir ama dış dünya ile iletişime geçemez bunun için bir endpoint tanımlamamız ve bu endpoint’in dış dünyada ile konuşacağı portuda belirtmemiz gerekmektedir.

Continue reading

Powershell ile Azure yönetimi

Eğer benim gibi her şeyi script haline getirmeyi seviyorsanız, Azure’u Powershell ile yönetmek isteyebilirsiniz. Bunun size birçok artısı olacaktır; özellikle yeni bir VM yaratırken birçok ayarı tekrar panelden girmek yerine script içerisinde ön tanımlı olarak ayarlayabilir hatta panelin size izin vermediği birçok özelliği kullanabilirsiniz(Örnek: Rastgele ip atanması yerine sizin istediğiniz bir ip’nin atanması gibi)

İlk önce yapmamız gereken Azure’un Powershell modülünü yüklememizdir. Bunun için http://go.microsoft.com/fwlink/p/?linkid=320376&clcid=0x41f adresinden bu modülü indirebilirsiniz. Modülün kurulumu oldukça basit sadece yönergeleri takip edin ve işlemleri bitirmesini bekleyin. Daha sonra “Başlat” menüsünden “Windows Azure Powershell” yazılımını başlatarak modüllerin yüklenip yüklenmediğini görelim.

Continue reading

Invoke-Command ile Parametre Kullanımı

En iyi sistem yöneticisi gündelik operasyonel görevlerini scripte eden sistem yöneticisidir.Doğal olarak güncelik işlerimizi scripte döküp mümkün olduğunca elle yapmaktan kaçınırız. Powershell sayesinde uzaktaki bir sunucuya bağlanıp istediğimiz komut veya scriptleri çalıştırabiliriz. Ben genelde yazmış olduğum scriptler veya runbook’lar içerisinde mümkün olduğu kadar “invoke-command”  kullanıyorum. Bu fonksiyon sayesinde uzak bir sunucuda tek bir komut veya birden fazla komutu çalıştırabilir ve çıktılarını daha sonra kullanmak için bir değişken içerisinde tutabilirim.

Bazı arkadaşlarım bana neden “Enter-Pssession” kullanmadığımı soruyor. Öncelikle Enter-PSSession kalıcı bir ihtiyaç duyuyorsanız ideal bir çözümdür. Bir kere uzak sunucuya bağlandığınızda session hep açık kalır. Bu hem iyi hem de kötüdür. Uzaktaki sunucuya hiç “remote desktop” yapmadan powershell ile bağlanıp yönetmenizi ve scriptler çalıştırabilirsiniz. Bir taraftan da kötüdür. Düşünsenize bir monitoring aracınız sürekli olarak sunucularda ki servislerinizi izliyor ve bir servis durduğu zaman ip adresini powershell scriptinize yollayıp otomatik bağlanmasını ve servisi başlatmasını istiyorsanız kalıbı bir bağlantı sağlanması veya her işlemden sonra bağlantıyı sonlandırmak için ek fonksiyonları çağırmak(Remove-PSSession) külfetli geliyor.

Invoke-Command ise bağlantıyı kurup çalışıp çıkış yaptığından dolayı benim daha çok tercih ettiğim bir fonksiyondur. Peki nasıl kullanılır?Mesela uzaktaki bir sunucuya bağlanıp registery kaydına bir şey ekleyen bir script hazırlayalım.

Başka bir yazımda bahsettiğim gibi “stored credential” kullanarak yeni bir session yaratabilirsiniz.Ya da aşağıda ki komutu kullanarak bir popup içerisinde username ve şifrenizi girebilirsiniz.

$cred = Get-Credential -Credential  <domain\username>

#Session yaratmak için önce credential’ları almamız gerekiyor. Stored credential veya yukarıda ki yöntemi kullanabilirsiniz.

[string]$reg1 = “Test”       
$session = New-Pssession –ComputerName <remoteServer> -Credential $cred
Invoke-Command –Session $session –ScriptBlock { New-ItemProperty -Path HKLM:\SOFTWARE\Test -Name Kritiklik -PropertyType String -Value args[0] } -Args $reg1

Burada önemli olan nokta –Args ile listelediğimiz değişkenleri uzaktaki sunucuda çağırmak istersek değişkenleri verdiğimiz sırayla numaralandırmalıyız. Örnek olarak

-Args $reg1 $reg2 $reg3
ScriptBlock içerisinde şu şekilde kullanılmalıdır
$args[0] $args[1] $args[2]

Invoke-command’u runbooklarınız içerisinde de kullanabilirsiniz.