Windows Powershell – Bölüm 1 – Pipeline Nedir ?

By | 08 December 2016

Uzun süredir powershell ile ilgili temel seviyeden başlayan bir makale serisi yazmak istiyordum. Zamanı geldi diyerek bu seriye başlamış bulunuyorum J

Gerek yeni gelen Windows Server 2016 mimarisinde gerekse Azure ve otomasyon çözümlerinde powershell kesinlikle hakim olunması gereken bir teknoloji haline geldi.

Hatta bu bahsettiğim teknolojilerin yeni gelen çoğu özelliği de sadece powershell ile konfigüre edilebilir durumda.

Hal böyle olunca artık temel anlamda bu teknolojiyi anlatmanın vakti geldi diye düşündüm.

Bu yazı serisi powershell’e sıfırdan başlayacakları daha çok ilgilendiriyor olacak.

En temel olarak pipeline nedir den başlayarak script yazımına kadar tüm konuları ele almayı planlıyorum.

Umarım powershell öğrenmek isteyenlerin işine yarayacak bir kaynak olur. Fazla uzatmadan Pipeline nedir ile işe başlayalım.

Pipeline Nedir?

Windows powershell komutları pipline içerisinde çalıştırır. Pipline bir yada daha fazla komut içerebilir.

Birden çok komut olması durumunda her komut ve parametreleri birbirlerinden pipe (|) ile ayrılır.

Pipeline içerisindeki komutlar soldan sağa doğru sıralı bir şekilde çalıştırılırlar.

Her komutun çalıştırılmasının ardından, komuta ait output bir sonraki komuta geçer. Bu output bir sonraki komut tarafından işlevine göre kullanılabilir.

Komutların Pipeline İçerisinde Çalıştırılması

Powershell üzerinde yazılan komutlar pipeline içerisinde çalışır. Örneğin:

Get-Service komutu Single-Command Pipeline’a örnek olarak verilebilir.

Multiple command pipeline çalıştırmakta bununla benzerdir. Sadece bir sonraki komut ile önceki komut arasına pipe koymak gerekir.

Get-Service | Out-File ServisListesi.txt

Yukarıdaki komut çalıştırıldığında powershell konsolunda herhangibir çıktı gözlenmez. Çünkü Get-Service komutu ile elde edilen service bilgisi pipe’tan sonraki komut ile ServisListesi isimli text dosyasına aktarılır.

Not: Out-File komutu kullanmak yerine Get-Service komutunun ardından “>” simgesi kullanılarak da aynı sonuc elde edilir.

Get-Service > ServisListesi.txt

image001

Komut output’ları bir tablo gibi düşünülebilir. Bu tablo üzerindeki her satır bir objeyi ifade eder. Yani Get-Service komutu çalıştırıldığında komut servis objelerine ait collection’ı output olarak sunar. Collection içerisindeki her obje kendisine ait Name,DisplayName ve status gibi property’lere sahiptir.

Text tabanlı shell’ler text üzerinde parse işlemi yapmada yüksek uğraş gerektirirler.  Çünkü çok iyi şekilde text parse işlemi yapılması ve text manipulasyon tekniklerinin kullanılması gerekir.

Powershell’de ise get komutu ile elde edilen servis objelerine ait name property’lerini listelemek text tabanlı shell’lere göre oldukça kolaydır. Output formunun yapısına bağlı kalmadan memory üzerindeki objelere ait bilgiler kolaylıkla elde edilir.

 

Obje Üyelerinin Belilenmesi (Object Members)

Powershell objeleri aşağıdaki öğeleri (Member) içerir.

  • Properties
  • Methods
  • Events

Properties

Objeye ait attribute’lar olarak tanımlanır. Process ID, Process Name property’lere örnek olarak verilebilir.

Methods

Metodlar objelerin yapacağı aksiyonları belirlerler. Örneğin event log objesi üzerindeki clear metodu event log’un kendini temizlemesini sağlar.

Events

Objeye birşey olduğunda tetiklenirler. Örneğin bir bir servis durduğunda bir event tetiklenebilir.

Windows powershell komutlarında önemli ölçüde property ve metod’lar kullanılır. Bazı objeler çok sayıda property içerebilir. Bu property’lerinin hepsinin aynı anda aynı ekrana sığması mümkün değildir. Bu yüzden objelere ait belli attribute’lar komutlar çalıştırıldığında listelenirler.

İhtiyaca yönelik objelere ait tüm property’ler listelenmek istenirse Get-Member komutunun kullanılması gerekir. Bu komut propertylerin yanında metod ve event’leri de listeler. Objelere ait type name’leri de bu komut yardımı ile öğrenilir.

Örneğin Get-Service komutuna ait type name System.ServiceProcess.ServiceController’dır.

Get-Member komutu yerine Gm takma adı da kullanılabilir. Böylece komutlar daha kısa şekilde yazılmış olur.

Get-Merber komutu aşağıdaki gibi kullanılır.

Get-Process | Get-Member

image002

Pipeline’ın Karışık Output İçermesi

Bir çok powershell komutu sadece tekbir obje tipini oluşturur. Fakat bazen bir den çok obje tipini oluşturabilir.

Örneğin aşağıdaki gibi bir dizinde bulunan dosyalar listelenip Get-Member komutu çalıştırıldığında iki tipte obje oluşur. (FileInfo ve DirectoryInfo) Çünkü dizin listelendiğinde dosya ve klasörleri listeleyebilir.

Get-ChildItem –Path C:\Windows

Birden çok obje tipi yayınlayan komutlarla çalışmak biraz güçtür. İyi analiz edilmesi gerekir. Çünkü farklı tipteki komutlar farklı property ve metodlara sahiptir.

Örneğin FileInfo objesi Legth property’sine sahipken DirectoryInfo objesinde böyle bir property yoktur. Eğer Get-ChildItem komutunu Lenght property’sine göre çalıştırılırsa beklenilen sonuç elde edilemez. Bu sebeple birden çok property içeren komutlar ile çalışıldığında bu duruma dikkat edilmesi gerekir.

Eğer birden çok obje tipi çıktısı sunan bir komut, Get-Member ile çalıştırılırsa, her bir obje tipinin sahip olduğu property,metod ve event’ler ayrı ayrı görüntülenebilir.

image003

Pipeline’ı temel olarak anlatmış olduk. Bir sonraki makalede görüşmek üzere.

Kaynak: Microsoft MOC MCT

Fırat

Leave a Reply