Optimizing Powershell functions by using a filter function

By Andrei Ungureanu - Last updated: Wednesday, February 1, 2017 - Save & Share - Leave a Comment

Cred ca cel mai bine ar fi sa incep explicand cum preia o functie input-ul ce vine prin pipeline.

In mod normal o functie in powershell poate sa preia input din pipeline folosind variabila $Input.

image

Si daca trimitem ceva prin pipeline catre functie iata ce obtinem:

image

Pare normal, nu-i asa? Dar iata ce se intampla cu adevarat in spate. Functia noastra asteapta pana intreg continutul array-ului ce vine prin pipeline este stocat in variabila $Input si abia apoi functia isi continua executia. Daca am dori ca in codul functiei sa prelucram continutul ce vine prin pipeline, ar trebui sa folosim o structura de tip ForEach si sa trecem prin toate obiectele din variabila $Input. Ceva ca in exemplul de mai jos:

image

Nota:Bineinteles ca rezultatul va fi identic cu cel din primul exemplu pentru ca doar am enumerat obiectele.

Va intrebati de ce nu folosesc $_ ca sa acceses obiectul curent din pipeline. Pentru ca nu este definit cand folosesc acest model si am zis si mai sus in ce moment se incepe executia functiei.

Dar daca vom defini functia ca un filtru si anume asa:

image

Scapam de ForEach si putem accesa variabila $_. Si mai mult de atat, in cazul in care avem un volum mare de obiecte ce vine prin pipeline, functia le va prelua pe rand si nu va trebui sa astepte pana cand toate vor fi stocate in $input.

Si acum ca stiti la ce foloseste Filter in powershell, va doresc Happy Scripting!

 

PS: Puteti folosi si definitia Function si sa accesati $_, dar folosing blocul Process:

image

E un topic mai advanced cand vine vorba de functii, asa ca prefer sa folosesc in continuare Filter.

Posted in Scripting • Tags: , , Top Of Page

Write a comment