Fonksiyonlar super faydali dostlarimiz. Onlar sayesinde defalarca calistirmamiz gereken komutlari ve scriptleri nezaman istersek o zaman bir butun olarak ve otomatik sekilde calistirabiliriz. Bir baska deyisle PowerShell’e onceden bir fonksiyon tanimlayip daha sonra ne zaman istersek cagirabiliriz. Bu sayede bir dizi komut ya da script’I her defasinda yasmak ya da calistirmak zorunda kalmayiz. PowerShell’e daha onceden tanittigimiz fonksiyonun ismini cagirmamiz yeterli. Gerisi PowerShell’de.
Fonksiyon konusunu farkli zamanlara farkli orneklere ele aliyorum fakat yine de burada minik de olsa bir aciklama yapmak istedim.
Simdi gelelim bu asagidaki basit fonksiyona. Bu fonksiyon digerlerine gore biraz farkli. Zira Parametre bolumunde “(ValueFromPipeline)” seklinde bir ifade var. Bu ifade, pipeline icinden gelen bir input oldugunda bunun $sayi adli degiskeni doldurmak icin kullanilacagini gosteriyor. Fonksiyon icindeki 3 bolum ise fonksiyonun hangi bolumunun ne sekilde calisitirilacagini gosteriyor.
Begin: Baslangicta hazirlik maksatli olarak 1 kere calisitirilir. Burada bir “trick” var, bakalim bulabilecek misiniz!
Process: Fonksiyon birden cok kere calisitirildiginda her seferinde alinacak aksiyonlari barindirir.
End: Tum islemler bittiginde son olarak 1 kere calisitirilir.
Bunu, ayni fonksiyonu iki farkli sekilde kullanarak test edelim simdi.
[crayon]
function test1{
[CmdletBinding()]
Param
(
[Parameter(ValueFromPipeline)]
[int[]]$sayi
)
BEGIN{
Write-Host “basla – sayi: $sayi” -ForegroundColor Red
}PROCESS{
Write-Host “islem – sayi: $sayi” -ForegroundColor Green
}END{
Write-Host “bitir – sayi: $sayi” -ForegroundColor Red
}
}
[/crayon]
Ilk olarak parametreyi kendimiz el ile verelim ve bakalim sonuc nasil oluyor. Bu, normal bir fonksiyonu calistirdigimiz yontem aslinda.
Goruldugu gibi fonksiyona parameter olarak verdigim 1 sayisi fonksiyonun tum bolumlerinde yerini aldi.
Simdi ayni fonksiyonu pipeline icinden gelen sayilarla besliyorum. Bu ornekte fonksiyon icindeki “sayi” parametresinin degeri once 1 sonra, sonra 3… sonra 5 olacak ve fonksiyon 5 kere bu degerlerle ayri ayri calisitirilacak. Bakalim sonuc nasil
Evet, begin ve end bolumleri, fonksiyonun 5 kere calisitirlmasina ragmen yalnzica 1 kere calistirildilar. Process bolumu ise beklendigi gibi fonksiyonun her calistirilisinda farkli bir deger alarak yoluna devam etti.
Bu yontemi pipeline icinde olusacak degeri fonksiyonlara parameter olarak atamak istediginizde kullanabilirsiniz. Begin, process ve end bolumlerini uygun sekilde kullanarak elbette!