Windows PowerShell Üzerinde Cmdlet – Pipeline – Scripting Kullanımı Bölüm 1

tarafından 8 Mart 2010 tarihinde Microsoft kategorisine yazıldı.

Windows PowerShell ile alakalı makale serimize devam ediyoruz.Daha önceki bölümlerde ne olduğuna bakıp kurulumunu yaptıktan sonra sıra geldi PowerShell ile alakalı komutları(cmdlet) incelemeye.Bu makalede PowerShell üzerinde kullanabileceğimiz Cmdletlere,Pipeline ve Scripting kullanımına bakacağız.

Windows Power Shell Cmdlet kavramı

Bir cmdlet(Command-Let) Windows PowerShell’de objeleri işleyen tek özellikli bir komuttur.Yani cmdlet PowerShell’in komut dizimidir.Bu komut dizimlerinin tamamı .Net platform’u tarafından fonksiyonel olarak desteklenmektedir..Net programlama dillerinin mantığı burada kullanılmıştır.Her komut Fiil-İsim(Verb-Noun) şeklinde tanımlanmıştır.Bir örnek vermek gerekirse Get-Command komutu ile kullanılabilen bütün cmdlet’lerin listesi alabiliriz.Aynı şekilde Get-Help komutunu kullanarak da yardım alabiliriz.

Geleneksel scripting dillerinde komutlar basitten(attrib.exe) karmaşığa(netsh.exe) doğru uzayan yürütülebilen programlardır.Windows PowerShell’de birçok komut(cmdlets) çok basittir ve diğer komutlar ile kombinasyon halinde kullanılmak için tasarlanmıştır.Örneğin “Get” komutu sadece bilgi alır.”Set” komutu sadece bilgi güncelleştirmek için,”Format” komutu bilgi formatlamak için,”Out” ise komut çıktısı almak için kullanılır.

Cmdlet yardım dosyasının detaylı görüntüsü her komutun kullanımını,Parametre kullanımı,komutun yazım dilini ve örnek bir kullanım da içermektedir.

İlk kullanıdığınızda Windows PowerShell’i anlayamasanızda .NET objeleri ile çalışabilirsiniz.Deneyim kazanırken, nesnelerin işlem gücü daha açık olmaya başlar ve kendimizi objeleri kullanırken bulabiliriz.Teknik olarak .Net nesnesi data ve data ile birlikte işletimi içeren bir .Net Class örneğidir.Bir nesneyi karakteristlik özelliği olan bir data varlığı gibi düşünebiliriz.

PowerShell’de Cmdlet kullanımı

Bu bölümde WindowsPowerShell’in başlıca kullanım amaçlarını ve komutlarını(cmdlet) açıklıyacağız.Windows komut satırı uygulamarını Windows PowerShell’de çalıştırabilmekteyiz.PowerShell bir çok Windows işletim sistemi üzerinde çalışabilmektedir.Notepad ve Hesap makinası gibi(Calc) grafiksel arayuze sahip olan uygulamaları PowerShell içinde’de çalıştırabilmekteyiz.Aynı zamanda Shell üzerinde daha önceden oluşturmuş olduğumuz text’leri kullanabiliriz.Aynen Cmd.exe’de yapmış olduğumuz gibi.Windows PowerShell’de kullanılan komutların ve parametrelerin büyük küçük harf duyarlılığı yoktur.

İlk olarak PowerShell üzerinde kullanabileceğimiz bütün parametre ve komut dizimleri hakkında nasıl bilgi alabileceğimize bakalım.Get-Command komutuyla Cmdlet’lerin listesini alabilmekteyiz.Burada cmdlet’ler listelendiğinde definition sütunu syntax’leri görüntülemektedir.Get-command komutu alias,uygulamalar ve Windows PowerShell’de kullanılabilen çalıştırabilir dosyalardan başka komut ve komut elementlerini de sahiptir.

image001

Uzantıları .exe olan komutları görüntülülemek için aşağıdaki sözdizimini kullanabiliriz.Burada definiton sütünu burada uygulamarın tam olarak hangi path’e yer aldığınıda göstermektedir.

image002

Aynı şekilde Get-help komutunu kullanarak da PowerShell üzerinde kullanılabilecek olan parametreleri ve bunların nasıl kullanılabileceği ile alakalı yardım alabiliriz.Get-Help komutu,Windows PowerShell’de kavramsal başlıkları ve cmdlet’ler hakkında bilgileri ayrıntılı bir şekilde görüntülemektedir.Get-Help,Windows PowerShell’i öğrenmek ve cmdlet’ler hakkındaki komutları okuyarak,kavramlar hakkında bilgi edinebilmek için kullanılması faydalı olan araçlardan biridir.

image003

Parametere özellikleri içeren bir cmdlet için detaylı bilgi alabilmek ve örnekleri görüntülüyebilmek içinde Get-Help komutunun detailed,full,examples,parameter parametrelerinden herhangi birini kullanabiliriz.Aynı zamanda komutların kullanımı ile alakalı da güzel örneklerde bulabilirsiniz.

image004

Unix’deki man sayfalarına benzer bir şekilde Verb(Fiil) ve Noun(isim) olarak bilgi edinmek istiyorsak aşağıdaki komutu kullanabiliriz.

image005

Komutlar da temel işlevler gören parametreler ile birlikte kullanılan joker karakterleri ile ilgili daha detaylı bigli alabilmek ve bu karakterlerin tamamını görüntülüyebilmek için aşağıdaki komutu kullanabiliriz.Aynı zamanda her kavram için yardım alabilmek için de “about_” kullanılabilir.

image006

Aynı tipteki tüm objeler birbirine benzer özellikler ve metodlara sahiptir,fakat bir objenin her bir örneği farklı özellikler için değişik değerlere sahip olabilir.Örneğin,her servis objesi isim ve durum özelliklerine sahip olabildiği gibi aynı zamanda bu servislerin hepsi değişik isimlere ve durum özelliklerine sahiptir.Cmdlet’in hangi tip bir objeye sahip olduğunu bulmak için belli başlı anahtar komutları tercih etmemiz gerekmektedir.Bunların kullanımının daha düzenli ve bir komut ile birden fazla işlemi yerine getirebilmek için Pipeline(Boru “|”) kullanılmaktadır.İlk olarak Get-Service komutunu kullanarak aşağıdaki gibi bütün servislerin listesini görebildiğimiz gibi aynı start ve stop olan servisleride görebilmekteyiz.

image007

Bir komutun döndüğü .Net objesi hakkında bilgileri görüntülüyen Get-member çok faydalı komutlardan biridir.Bu bilgi objenin tipini,özelliklerini ve metodlarını içermektedir.Get-member bir komut ile birlikte kullanılması gerekmektedir.Bunun içinde Pipeline kullanılır.

Bu şekilde Get-Service ile Get-Member komutu birlikte kullanılabilmektedir.Bu komutun çıktısında ise Servis nesneleri hakkında bilgi alabilmemizi sağlamaktadır.Ayrıca Get-Member objelerin tip isimlerinin özelliklerini ve metodlarını da göstermektedir.

image008

Obje sınıfları hakkında yukarıda da görüldüğü TypeName: System.ServiceProcess.ServiceController gibi tip isimlerinin kullanım ile ilgili bilgiyi MSDN’den edinebilirsiniz.PowerShell’deki gibi bu sınıfa dayanan nesnelerin metodlarını ve özelliklerini öğrenmek için yine MSDN’den faydalanabilirsiniz.Geleneksel sheller’de komut çıktısını özelleştirmek için bazı araçlar kullanılmaktadır.Bu araçlar komut çıktısının formatını kontrol etmek için özel parametreler içermektedir.PowerShell üzerinde bu amaçla kullanabileceğimiz komutlar ise aşağıdaki gibidir.

Format-List

Format-Custom

Format-Table

Format-Wide

Get komutunun sonuçlarını bir Format-List veya Format-Table komutuna göndermek ve belirli nesnelerin özelliklerinin tamamının değerini bulmak için Pipeline kullanmamız gerekmektedir.Bu şekilde herhangi bir cmdlet’in çıktı formatı tablo veya sütunlar halinde görüntülenebilir.Sadece veri değil,servisler hakkında da bilgiler yer almaktadır. Örneğin,

image009

Bir başka örnek olarak da,Sistemdeki çalışan Task Schedule servisinin tüm özelliklerini görebilmek için aşağıdaki komutu kullanabiliriz.

image010

Windows PowerShell’i ilk defa kullanmaya başlamadığınızda objelerin hakkında ki her şeyi anlamaya çalışmamıza gerek yoktur,fakat bu komutların kullanım şeklini aklımızda tutmamız gerekmektedir.İlerleyen zamanlarda bu objelerin avantajlarını görerek daha fazla kullanabileceğiz.

Tüm parametreler Commonparameter olarak adlandırılan bir takım parametreleri desteklemektedir. Bu özellik Windows PowerShell’e tutarlı bir arayüz sağlamaktadır.Bir cmdlet ortak bir parametreyi destekledğinide,parametre kullanımında hata ile karşılaşmayız.Commonparametre ile alakalı daha fazla bilgi için aşağıdaki komutu kullanabiliriz.

image011

Arkadaşlar görüldüğü üzere cmdlet’lerin parametreleri bir kısa çizgi(-) ile tanımlanmaktadır.Windows PowerShell’de parametrelerde “/ \” kullanılmaz.PowerShell üzerinde kullanılan her komut ve parametre için yeterli bir kaç adet kelime yazdıktan sonra TAB tuşunu kullanarak otomatik tamamlama yapabiliyoruz. Bunun sebebi ise PowerShell’in .Net platformunda çalışabilmesi olarak açıklanabilir.Bu komutların dışında yine PowerShell kullanımı ile alakalı olarak Get-Command,Get-Eventlog,Get-Process gibi komutları da kullanabilirsiniz.

Otomatik Tamamlama

PowerShell üzerinde barındırmış olduğu komutların ve bunların parametrelerinin daha kolay bir şekilde kullanılabilmesi için otomatik tamamlamayı desteklemektedir.Çalıştırmak istediğiniz cmdlet’lerin tamamını yazmadan sadece TAB tuşunu kullanarak bunlara ait olan argümanların tamamlanmasını sağlıyabiliriz.Argüman tamamlama olayı aslında komutların birer .NET platformu tarafından desteklenmesinden ve daha önceden tanımlanmış olmasından kaynaklanmaktadır.Birkaç eksikliği bulunan bu özellik mutlaka ilerleyen versiyonlarda geliştirilecektir.

Pipeline

Obje kullanımının en büyük avantajlarından bir tanesi Pipeline(Boru “|”) komutundan dolayı daha kolay kullanılabilmesidir.Yani bir komutun çıktısını başka bir komutun girdisi olmaktadır.İletişim çoğunlukla çıktıyı bir format’dan diğerine döndürmek,sütun başlaklarını silmek ve dizgi manipülasyonu istemektedir.Windows PowerShell, text’den ziyade objelere dayanan yeni bir interaktif model sağlamaktadır.Objeleri çalıştıran cmdlet herhangi bir dönüştürme ya da manipülasyon olmaksızın metodlar ve özellikler üzerinde doğrudan bir rol oynamaktadır.Tabi ki bu özellikler cmdlet’e ait olanlardır.Kullanıcılar çıktıdaki data’nın durumunu hesaplamak yerine objelerin metodlarına ve özelliklerine değinebilir.Aşağıdaki örnek de bir hepimizin cmd.exe’den bildiği Ipconfig komutunun çıktısı görülmektedir.

image012

Şimdi gelin,Ipconfig komutuna ek olarak bir Pipeline ve bir cmdlet uygulayarak daha spesifik bir çıktı elde edelim.Mesela sadece Ip adresinin görüntülenmesi gibi.

Scripting

Diğer kabuk programlamalarında olduğu gibi Windows PowerShell’de tam interaktif bir ortamı desteklemektedir.Command Prompt’da bir komutu yazdığınızda komut işlenir ve çıktı shell penceresinde görüntülenir.Ya da bu komut çıktısını bir dosya ya kaydedebilir veya yazıcıya gönderebilliriz.Bir diğer seçenek olarak da bir çıktı yı başka bir komuta göndermek için Pipeline kullanabiliriz.Eğer komut satırında tekrar tekrar çalıştıracağımız belli komut dizimleri varsa bunları çalıştırılabilir bir dosyaya kaydedebiliriz.Bu uygulamaya scripting ismini de verebiliriz.Sık erişim sağlamış odluğumuz komutları,örneğin .VBS(Visual Basic Script) olarak kaydedip daha sonra çift tıklama ile kolay bir şekilde uzun uzun yazmak zorunda kalmadan komutun istemiş olduğu işlevi yerine getirebiliriz.Windows PowerShell tamamen Scripting uygulamalarını desteklemektedir.PowerShell’de script uygulumaları .PS1 uzantasına sahiptir.Script’i PowerShell üzerinde çalıştırabilmek için sadece ismini yazmamız yeterlidir.Dosya uzantısını yazmak ise opsiyonel’dir. Script geçerli geçerli dizindeyse bile çalıştırabilmesi için tam tanımlanmış yolu belirtmemiz gerekmektedir.Geçerli dizini göstermek için dizin ismini yazabilir ya da geçerli dizini temsil eden bir nokta(.) kullanabilirsiniz.

Peki ozaman şimdi PowerShell üzerinde scripting ile alakalı yapabileceğimiz uygulamalara bakalım.İlk olarak VBS scripting’e benzer bir şekilde PowerShell üzerinde temel komutlar ile yazı yazdırabilmekteyiz.

image013

InputBox ve MsgBox kullanımı

En basit scripting kullanımında sonra biraz daha gelişmiş konfigürasyonları yapmaya çalışalım.Örneğin bir inputbox uygulaması yapalım.Böyle bir senaryoyu gerçekleştirmek için öncelikle Microsoft Visualbasic sınıfını yüklemek için aşağıdaki komutu çalıştıralım.

image014

Şimdi de Inputbox oluşturmak için gerekli olan komutu çalıştıralım.

image015

Ve sonuç olarak çıktı aşağıdaki gibidir.

image016

Msgbox kullanımı için ise aynı class’ı kullanıyoruz.Eğer yüklemdiyseniz yukarıda Inputbox için kullanmış olduğumuz sınıfı yüklemelisiniz.Msgbox oluşturmak için ise aşağıdaki komutu kullanıyoruz.

image017

Window ve Button Parametresinin kullanımı

.Net platformu tarafından desteklenen PowerShell dinamik bir içeriğe sahiptir.Visual Basic tarafında kullanmış olduğumuz bir çok programlama komutunu PowerShell üzerinde de gerekli sınıf yüklemesi yaptıktan sonra kullanabiliriz.İlk olarak sınıf yüklemesi yaparak başlıyalım.

image018

Şimdi yapıcağımzı örnek de bir Windows Formu oluşturup içerisine bir buton ekliyelim.Bu işlem için aşağıdaki komutu kullanabiliriz.

image019

Scriptler birçok kuruluşda kullanışlı ve gerekli olmasına rağmen kötü niyetli kodların çalıştırılmasını da alet edilebilir.Sonuç olarak Windows PowerShell’in güvenlik politikiları, hangi scriptlerin çalıştırılıp çalıştırılmıyacağını aynı zamanda çalıştırılacak olan script’in digital imza içerip içermediğini kontrol etmektedir.Bu riskleri elimine edebilmemize olanak sağlar.Daha güvenli bir PowerShell arayüzünde çalışmamız bu konulara dikkat etmemiz gerekmektedir.Windows PowerShell’deki güvenlik politikalarının hiç birisi herhangi bir script’i çift tıklayarak çalıştırmamıza izin vermez.PowerShell üzerindeki Execution policyleri görebilmek için aşağıdaki komut çıktısını kullanabiliriz.

image020

Ayrıca Windows PowerShell kolaydan zora doğru script oluşturmamıza izin veren çok zengin bir dile sahiptir.Aynı zamanda PowerShell yazım dilinde değişken,değişken atamaları ve döngü kullanımını desteklemektedir.

Evet arkadaşlar,bu makalede Windows PowerShell üzerinde kullanabileceğimiz Cmdletlere,Pipeline ve Scripting kullanımına baktık.Aynı zamanda gerekli class’ları yükledikten sonra bu platform üzerinde Window ve Button parametrelerini kullanarak kendimize ait özel formlar hazırladık.Bu makalenin 2. serisinde Powershell üzerinde kullanabileceğimiz diğer cmdletlere bakacağız.

Hoşçakalın

Kaynak:

Microsoft Offical Course(MOC)

Bu yazı blog üzerinde Tayfun DEĞER tarafından paylaşılmıştır. 2009 yılında açılan blog kısa zaman içerisinde büyük bir izleyici kitlesine sahip olmuştur.Tayfun DEĞER danışmanlık ve eğitimler vermektedir. vExpert 2013-2015, VCP5, VCP5-DT, VCP-Cloud ve MCSE sertifikalarına sahiptir.Twitter 'dan @tayfundeger veya RSS ile sitedeki değişiklikleri takip edebilirsiniz.