Potok czyli pełna moc możliwości PowerShell

By Podstawy, PowerShell

Dzięki „pionowej kresce” w poleceniach, można wykorzystać pełną moc PowerShell. Znak potoku | bo o nim mowa, umożliwia nam łączyć wiele poleceń w potężne jednowierszowe sekwencję.

W ten sposób osiągamy w jednym wierszu to, co zwykle wymagałoby pisania kilku linii w skrypcie. Wszystko to zasługa potoku.

Potok

Potok zapewnia efektywny sposób przekazywania wyników pomiędzy poleceniami. Każdy znak potoku | powoduję próbę wysyła wyniku poprzedniego polecenia do następnego.

Parafrazując, dane wyjściowe pierwszego polecenia trafiają jako dane wejściowe do następnego polecenia, dane drugiego do kolejnego i tak dalej. Jak woda w potoku, wyniki w PowerShell „płyną” z lewej do prawej.

Jeden niuans, nie wszystkie polecenia akceptują przekazane dane z potoku.

Jak sprawdzić?

Najprościej, sięgając do treści pomocy. W tym celu wykonaj polecenie help z parametrem  -Parameter * i zwróć uwagę na Accept pipeline input.

Oprócz informacji, do jakich parametrów możliwe jest przekazanie wartości, również dowiesz się jakiego typu dane oraz jakie metody wiązania są akceptowane.

Metoda ByValue

Metody są dwie, jednak ByValue ma pierwszeństwo. Jej działanie jest proste, polega na przekazaniu całego obiektu (wszystkich właściwości, metod, aliasów) do kolejnego polecenia.

Zobacz na przykładzie. Get-Process zwraca obiekt typu System.Diagnostics.Process. który jest w całości przekazywany do polecenia Stop-Process. Nastąpi to dopiero po tym jak powłoka PowerShell sprawdzi, czy jakikolwiek parametr polecenie akceptuję meotdę ByValue i przyjmuję obiekt takiego typ.

potok ByValue jak działa pipeline

Jeśli wszystkie warunki są spełnione, wykonywane jest polecenie Stop-Process, jeśli nie to powłoka sprawdza drugą metode.

Metoda ByPropertyName

ByValue opiera się na typie obiektu, natomiast ByPropertyName tylko na nazwie właściwości. Oczywiście wcześniej sprawdzając, czy parametr akceptuję dane z potoku.

W przeciwieństwie do ByValue, która akceptuję jedno wiązanie, ta metoda pozwala na wiązanie wielu pasujących do siebie właściwości i parametrów.

potok ByPropertyName jak działa pipeline

W przypadku Get-Item -Path . | Stop-Process typ obiektu nie zgadza się z typem parametru InputObject. Dlatego wystąpiło wiązanie po nazwie właściwości Name i wykonanie polecenia Stop-Process.

Takie polecanie nie ma większego sensu, ale jako przykład jest idealne 🙂

Dla ciekawskich

Jeśli chciałbyś podejrzeć co dokładnie PowerShell wykonuję w momencie użycia znaku potoku z pomocą przychodzi polecenie Trace-Command.

Podsumowanie

Wpis miał przybliżyć jak PowerShell podejmuję decyzję, kiedy wyjście jednego polecenie może zostać przekazane do kolejnego.

Na początku stosowania potoku może być nieintuicyjne, ale przy odrobinie praktyki przekonasz się, że łączenie poleceń oszczędza czas, a także zwiększa efektywność skryptów.

No comments yet.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.

× Close