Windows PowerShell – ByPropertyname Tekniği ile Data Aktarımı – Bölüm 9

Windows PowerShell – ByPropertyname Tekniği ile Data Aktarımı – Bölüm 9. Bir önceki bölümde örnek üzerinden giderek anlatmıştım. Bu bölümde de yine örnek üzerinden anlatalım.

Örneğin Steam isimli Process’i Get-Process cmdlet’i ile listeleyelim. Normal olarak aşağıdaki şekildeki gibi listelenir.


Resim-1

Bu işlemi bir değişkene atayalım ve bu değişkeni Stop-Process cmdlet’inin parametresi olan –InputObject parametresine değer olarak atayalım.

Bu işlemin ardından komut düzgün şekilde çalışacak ve ilgili Process sonlandırılacaktır. Bu beklenen bir durumdur.


Resim-2

Get-Help komutu ile Get-Process Cmdlet’ine ait InputObject parametresi aşağıdaki gibi inceleyelim.

Burada 1 numara ile belirtilen kısım Get-Process cmdlet’inin Input Object olarak bir Process Array’ini kabul ettiğini gösterir. (Yani herhangi bir String değer verilemez)

2 numara ile belirtilen kısım ise ByValue tekniğini kullandığını gösterir.

Burada anlaşılması gereken $Process değişkeninin değeri direkt olarak InputObject’e verilir. Değere göre işlem yapılır. (Process objesinin atandığı değişkenin değerine göre)


Resim-3

Şimdi bu hatırlatmanın ardından asıl konuya gelelim.

Get_Process cmdlet’ine ait name Property’si Get-help ile sorgulandığında aşağıdaki şekilde görüldüğü üzere ByPropertyName tekniğini kullandığı görünür.

Bu Property’nin değerleri String Array halinde aldığı da görünmektedir.


Resim-4

Stop-Process cmdlet’ine Pipeline üzerinden direkt olarak String değer gönderdiğimizde alınacak sonuç aşağıdaki gibidir.

Hatada stop-Process cmdlet’inin Pipeline üzerinden String bir değer ile bu şekilde Binding kurmadığı söylenmektedir.


Resim-5

Yani Pipeline üzerinden stop-Process cmdlet’inin Name Property’sine sahip bir obje yollamak gereklidir. Stop-Process cmdlet’i gelen objede Name Property’si aramakta ve eğer bu Property’i bulursa, Property’e ait değeri alıp işlem yapmaktadır.


Resim-6

Bunu test etmek için aşağıdaki gibi name Property’sine sahip bir obje oluşturalım ve name Property’sine değer olarak durdurulacak Process’in ismini verelim.

$frtObj = New-Object -TypeName psobject -Property @{name=”steam”} (daha sonraki bölümlerde obje oluşturmayı ayrıntılı olarak ele alacağım, şimdilik örnek olması açısından oluşturuyorum)

Ardından bu objeyi Pipeline üzerinden Stop-Process cmdlet’ine gönderelim.

$frtObj | Stop-Process


Resim-7

Bu işlemlerin ardından sonuç hatasız olup Process durdurulacaktır.

Burada dikkat edilecek nokta Stop-Process cmdlet’i Pipeline üzerinden gelecek obje’de name parametresi aramaktadır ve bu parametre ile bind işlemini gerçekleştirmektedir.

Eğer name parametresi olmasaydı, örneğin objenin title diye bir Property’si olsaydı sonuç olarak Stop-Process cmdlet’i Name isminde bir Property bulamayıp aşağıdaki gibi hata alırdı.


Resim-8

ByValue ve ByPropertyname teknikleri PowerShell ile uğraşan kişilerin bilmesi gereken önemli bilgilerdir. Komut yazarken ya da daha da geliştirip Script yazarken Pipeline’dan gönderilen datanın bir sonraki cmdlet ile Binding’inin uyumlu olup olmaması bu tekniklere bağlı.

Burada önerilen Get-Help komutu ile Property’lere ait “Accept Pipeline Input” değerlerine bakıp datanın uygun şekilde gönderilmesini sağlamaktır.

Umarım faydalı olmuştur.

Daha değişik örnekler için aşağıdaki linkten faydalanabilirsiniz.

https://blogs.technet.microsoft.com/heyscriptingguy/2013/03/25/learn-about-using-PowerShell-value-binding-by-Property-name/

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 DMOC

Yazı gezinmesi

Mobil sürümden çık