Microsoft Windows PowerShell

Microsoft Windows PowerShell

Bu makalede Microsoft (R) Windows (R) PowerShell (R) aracını tanıyor ve bu aracın temel kullanım özelliklerini inceliyor olacağız. Bu anlamda, Windows PowerShell interaktif bir komut arayüzü ve yönetimsel işlemlere destek vermek için geliştirilmiş bir scripting ortamıdır. Windows XP ve Windows Server 2003 işletim sistemleri için internet üzerinden ücretsiz download edilebilir, ve Microsoft Windows Server 2008 üzerinde ayrıca kurulması gereken bir ek özellik olarak yer almaktadır.

PowerShell, işlemlerin otomatize edilmesi için gereken altyapıyı sağlamaktadır. Bu altyapıyı sağlarken .Net Framework 2.0 üzerinde çalışmaktadır. Bundan dolayı .Net Framework 2.0 kurulu olan sistemlerde PowerShell kullanılabilir.

Diğer tüm script dillerinin veya arayüzlerinin aksine Windows PowerShell obje-tabanlı (Object-Oriented) bir platformdur. Windows PowerShell ortamında .NET, COM ve WMI objeleri birlikte kullanılabilir.

Ayrıca Windows PowerShell aracı, çeşitli scriptler, aliaslar ve eklentilerle genişletilebilir bir ortam sunmaktadır. Bu genişletilebilmeye verilebilecek en güzel ve güncel örnek Exchange Server 2007 ile birlikte tanıtılan Exchange Management Shell’dir. Exchange Management Shell, altyapısında Windows PowerShell mimarisini kullanmaktadır.


PowerShell Kurulumu:

Windows Server 2008 üzerinde yer alan Server Manager konsolu aracılığıyla sunucu üzerine Windows PowerShell kurmak mümkündür. Bunun için Server Manager üzerindeki “Features” bölümünden “Add Features” görevi seçilmeli ve feature ekleme sihirbazında Windows PowerShell seçilmelidir.


PowerShell çalışabilmek için .NET Framework 2.0 veya 3.0 yapısına ihtiyaç duyar. .NET Framework 3.0 da Windows Server 2008 üzerinde feature olarak yer almaktadır.

.NET Framework, Windows Server 2008′in Server Core sürümlerinde kullanılamadığından dolayı Windows PowerShell ortamına Server Core üzerinde kullanmamız henüz mümkün değildir.

PowerShell özellik olarak kurulduktan sonra ihtiyaç duyduğu dosyaları “C:\Windows\System32\WindowsPowerShell\v1.0″ klasörü altına kopyalar.


Kurulum bittikten sonra PowerShell çalıştırıldığında mavi fona sahip bir kabukla karşılaşırız.


Konsolun görünümü, genişliği, kullanılan fontlar ve renkler gibi detaylar tıpkı tüm konsollarda olduğu gibi değiştirilebilir. Bu, sistem yöneticilerinin PowerShell’i kendi alışkanlıkları doğrultusunda kişiselleştirebilmesini sağlar.

PowerShell ilk kurulduğunda .ps1 uzantılı dosyalar varsayılan güvenlik ayarları powershell scriptlerinin çalıştırılmasını yasakladığı için notepad ile eşleştirilmiştir. PowerShell’in sorunsuz çalışabilmesi için gerekli ayarı yine powershell üzerinden gerçekleştiriyoruz. Bu yasaklama ExecutionPolicy adını taşır. PowerShell konsolu üzerinde Get-ExecutionPolicy komutunu kullandığımızda karşımıza gelen değer “Restricted” olacaktır.


Komut seti ve scriptlerin sorunsuz çalışabilmesi için ise bunu “RemoteSigned” durumuna getirmeliyiz. Bunun için ise “Set-ExecutionPolicy” komutu kullanılmalıdır. Bu komutun yanına “Remotesigned” parametresini ekleyerek script çalıştırma izinlerini belirleyen ExecutionPolicy üzerindeki temel ayarları gerçekleştirmiş oluyoruz.

Komut Setleri ile Çalışmak

Komut setleri Windows PowerShell’e özgü bir yapıdır. PowerShell 1.0 üzerinde dahili olarak .dll ler üzerinde bulunan yaklaşık 130 adet komut seti (cmdlet – commandlet) yer almaktadır. Bu komut setleriyle temel yönetimsel işlemler gerçekleştirilebilir. Windows PowerShell üzerinde yer alan komut setleri “Fiil – İsim” yapısında çalışmaktadır. Örneğin “Get-Process” komut seti ile o anda çalışan işlemler görüntülenebilir. Bu yapıda “Get” fiil, “Process” ise isim olarak yer almaktadır. Komut setlerinde yer alan isimler mutlaka tekil olmalıdır. Yani o anda çalışan işlemleri listelemek için “Get-Processes” şeklinde bir komut seti kullanmamız mümkün değildir. Doğru kullanım “Get-Process” şeklinde olacaktır.


Bunun yanı sıra komut setlerinde dizinin çalışmasını etkileyecek bazı parametreler eklenebilir. Bu tip parametreler kullanılırken “-” ekiyle ayrılır. “Get-Process” komut seti örneğinden devam edersek, “Get-Process –name lsass gibi bir kullanım ile lsass.exe işleminin görüntülenmesi mümkün olacaktır. Aynı şekilde lsass.exe işleminin görüntülenmesini “Get-Process lsass” komutsetini kullanarak da gerçekleştirebiliriz. Burada görüldüğü gibi parametrelerin kullanımı zorunlu değildir.


Örneğin, Windows PowerShell üzerinde kullanılabilecek komutları, buradaki fiil – isim yapısını daha iyi anlamak için şu komut setini çalıştırabiliriz:

“Get-Command –Verb Get” bu sayede “Get-”fiiliyle başlayan bütün komutlar görüntülenebilir. Bunun yanı sıra “Get-Command –Verb Set”" komut setiyle “Set” fiilinin kullanıldığı bütün komutları listelemek de mümkündür.


Bunun gibi komut setlerinin yardım amaçlı farklı kullanımlarına göz atmak gerekirse –ki Windows Powershell üzerinde yapılabilecekleri daha iyi anlamak için gerekecektir – “Get-Help Get-Process” komut setini kullanarak “Get-Process” komut setiyle ilgili yardım bilgilerine ulaşabiliriz. Veya bir adım ötesinde, kullandığımız get-help komut setine farklı bir parametre ekleyerek gelen yardım bilgilerinin daha detaylı olmasını sağlayabiliriz. (Get-Help Get-Process –full)


Komut setlerinin kullanılan parametreye göre işlem yapacağından bahsetmiştik. Örneğin Get-Process komut setini ele alacak olursak, bu komut seti ile o anda aktif olarak çalışan tüm işlemler listelenecektir. Ancak –name parametresi kullanılarak bir process ismi seçildiğinde sadece bu obje ile ilgili işlemler yapılacaktır. Powershell kullanarak farklı komutları arka arkaya dizmek (pipelining) mümkün olduğuna göre, spesifik bir işlemi bir sonraki komut setinin girdisi olarak tanımlamak bir çok yönetimsel işlemde işimize yarayacaktır.

Windows PowerShell üzerinde de diğer yönetimsel kabuklarda olduğu gibi Tab kullanımı mevcuttur. Yani herhangi bir komutun tamamını hatırlayamadığınızda komutun bir kısmını yazıp TAB tuşuna basarak olası komutlar içerisinden seçim yapabilirsiniz. Örneğin “Get-C” yazıp TAB tuşuna bastığınızda “Get-ChildItem” komut seti görüntülenecektir. Eğer kullanmak istediğiniz komut seti bu değilse, tekrar TAB tuşuna basarak Get-C ile başlayan bir sonraki komut setini görüntüleyebilirsiniz.

Ayrıca WindowsPowerShell girişi yapılmış komutları da tutmaktadır. Bu sayede F7 tuşunu kullanarak daha önce yapmış olduğumuz işlemleri yeniden yazmadan tekrarlama şansımız vardır.

Windows PowerShell üzerinde alışkanlık veya kişiselleştirmeler yapılabilir. Bunu sğalamak için Alias yapısı kullanılmaktadır. Windows PowerShell üzerinde varsayılan olarak 100 adet Alias tanımlıdır. Örneğin “gci” yazarak “Get-ChildItem” komut setine ulaşabilirsiniz. MS-DOS kabuğunda çalışmış olan ve buradaki komutlara alışkın olanlar için ise “Dir” komutu kullanılarak Get-ChildItem” komut seti çağırılabilir. Aynı şey UNIX kullanıcıları için de geçerlidir. UNIX üzerinde çalışan bir çok temel komut Windows PowerShell üzerinde Alias olarak tanımlanmıştır. Örneğin “ls” komutu kullanılarak da “Get-ChildItem” komut seti çalıştırılabilir. (ls ve dir screenshotları)

Bu sayede yöneticiler alışkın oldukları mimari üzerinde çalışır gibi Windows PowerShell üzerinde işlemlerini yapabileceklerdir. Bunların dışında Windows PowerShell üzerinde kendimiz de Alias tanımlayabiliriz. Bunun için ise “Set-Alias” komut seti kullanılmaktadır. Örneğin “Set-Alias GH Get-Help” komut setini kullanarak bundan sonra GH yazdığımızda “Get-Help” komut setinin çağırılmasını sağlamamız mümkündür. Bu şekilde kişiselleştirilmiş komut setleri ile kendi Windows PowerShell profillerimizi de oluşturabilmekteyiz.

Ardarda Bağlama (Pipelining)

Çoğunlukla yönetimsel işlemlerde girilen bir komutun çıktısı kullanılarak bir diğer komutun girdisi elde edilmek istenir. Bu işlemin sağlanması Microsoft’un alışıldık yönetim kabuğunda mümkün değildi. Ancak Windows PowerShell ile ard arda komutları bağlamak ve bu şekilde işlemlerin daha çabuk ve otomatize edilmiş bir şekilde gerçekleşmesini sağlamak mümkündür. Komutların arka arkaya bağlanması işlemi “Pipelining” olarak tanımlanır.

Bu işlemi gerçekleştirmek için “|” işareti kullanılmaktadır. Pipeline işareti olan “|”, Windows PowerShell içerisinde yer alan bir dinamiktir. Bundan dolayı bir komut seti işlenmeye başlayınca komut seti içerisindeki tüm pipeline’lar bitmeden komutun işlenmesi sonlandırılmaz.

Örnek bir kullanıma göz atacak olursak;

“Get-Process | Sort-Object” şeklinde çalıştırılan bir komutun çıktısı, arka planda çalışan işlemlerin sıralı listesi olacaktır.

Peki, pipelining kullanarak yalnızca iki komut seti mi birleştirilebilir? Tabii ki hayır. Verdiğimiz örneği geliştirerek arka planda çalışan işlemlerin isimlerine göre azalan bir biçimde (Z-A) listelenmesini istiyorsak nasıl bir komut seti oluşturmamız gerekir? Mantıksal olarak düşünecek olursak, öncelikle işlemleri listeletmeliyiz. Peki, Listelenen işlemlerin ne gibi özellikleri olacaktır? İşlemin numarası, ismi, işlemci üzerinde oluşturduğu yük, hangi kullanıcı hesabıyla çalıştırıldığı gibi bilgiler gelen listede yer alacaktır. Biz bu listelemeyi işlemlerin ismine göre yapmak istiyoruz. Bunun için ise işlemlerin “isim” özelliklerini almamız gerekecek. Son adım (komut seti) olarak ise aldığımız isimleri azalan biçimde sıralamamız gerekecek.

PowerShell ortamına dönecek olursak bu işlemi gerçekleştirmek için hazırlamamız gereken komut seti şöyle olmalıdır:

“Get-Process | Select Name, ProcessName | Sort ProcessName -Descending”

Bu sayede arka planda çalışan işlemlerin “ProcessName” bilgilerine yani isimlerine göre azalan bir biçimde sıralanmasını sağlayabiliriz.


Microsoft Windows PowerShell yönetim aracını genel olarak incelediğimiz makalemizin sonuna geldik. Powershell aracının değişken yapısı ve günlük hayatta karşılaşılabilecek / ihtiyaç duyulabilecek kullanım örneklerine bir sonraki makalemizde değineceğiz.

1 Yorum

Özgür KOLUKISAEkim 28th, 2009 03:46

Açıkçası, Server Core gibi shell’den ibaret bir işletim sisteminin powershell’den yoksun olmasını anlayamıyorum. Bunun için Server Core kullanmayacağımdır efendim. Yazı için ellerine sağlık.

Yorum Yapın

Mesajınız