Windows PowerShell – Pipeline Nedir? – Bölüm 1. Uzun süredir PowerShell ile ilgili temel seviyeden başlayan bir makale serisi yazmak istiyordum. Zamanı geldi diyerek bu seriye başlamış bulunuyorum :)
Gerek yeni gelen Windows Server 2016 mimarisinde gerekse Azure ve otomasyon çözümlerinde PowerShell kesinlikle hakim olunması gereken bir teknoloji haline geldi.
Serinin tüm yazıları için aşağıdaki dört linki kullanabilirsiniz.
Windows PowerShell – Pipeline Nedir? – Bölüm 1
Windows Powershell – Sorting and Measuring (Sıralama ve Ölçme) – Bölüm 2
Windows Powershell – Select Object – Hash Table and Formatting – Bölüm 3
Microsoft Powershell – ConvertTo ve Export Komutları – Bölüm 4
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?
Resim-1
Windows PowerShell komutları Pipeline içerisinde çalıştırır. Pipeline 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 herhangi bir çı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ı sonuç elde edilir.
Get-Service > ServisListesi.txt
Pipeline Output : Birçok PowerShell komut Output olarak text oluşturmak yerine obje oluşturur. Obje Memory üzerindeki data yapısını ifade eden genel bir kelimedir.
Resim-2
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 Belirlenmesi (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 yandaki gibi kullanılır : Get-Process | Get-Member
Resim-3
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 metotlara 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.
Resim-4
Pipeline’ı temel olarak anlatmış olduk. Bir sonraki makalede görüşmek üzere.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
Microsoft Coursaware Library
TAGs : powershell, powershell komutlari, powershell nasil kullanilir, powershell ayarlari, powershell pipeline nedir, pipeline kullanimi, powershell pipeline kullanimi, powershell, microsoft
Yorumlar (3)