3

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

www.mshowto.org

Microsoft Coursaware Library

 

TAGs : powershell, powershell komutlari, powershell nasil kullanilir, powershell ayarlari, powershell pipeline nedir, pipeline kullanimi, powershell pipeline kullanimi, powershell, microsoft

Bu İçeriğe Tepkin Ne Oldu?
  • 1
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Sakarya doğumludur. İstanbul Üniversitesi’nde Matematik/Fen ve Teknoloji öğretmenliğini bitirmiştir. Yüksek lisansını Sakarya Üniversitesi Bilgisayar Mühendisliği’nde yapmıştır. Bilişim sektöründe çeşitli firmalarda sistem ve network sorumlusu olarak çalışmıştır. Bazı kurumlarda sistem ve network üzerine uzmanlık eğitimleri vermiştir. Şu anda Netaş şirketinde kurumsal danışman olarak görev yapmaktadır. Microsoft System Center ürünleri, Powershell ve Azure teknolojileri ile ilgilenmektedir. 2016 yılında Microsoft tarafından Cloud and Datacenter alanında MVP unvanını almıştır.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorumlar (3)

    Bir yanıt yazın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir