1. Ana Sayfa
  2. Microsoft PowerShell
  3. 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

Windows – 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ı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

Microsoft DMOC

Yorum Yap

Yazar Hakkında

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.

Yorum Yap