Obie odpowiedzi w ten sposób dają dobre informacje na temat potokowania. Jednak jest jeszcze coś do powiedzenia.
Po pierwsze, aby bezpośrednio odpowiedzieć na twoje pytanie, przewidziano dwa możliwe sposoby działania potoku. Oboje mają rację ... w zależności od cmdletów po obu stronach rury! Jednak sposób, w jaki potok powinien działać, jest bliższy Twojemu drugiemu poglądowi: obiekty są przetwarzane pojedynczo. (Chociaż nie ma gwarancji, że obiekt przejdzie przez całą drogę przed następnym uruchomieniem, ponieważ każdy komponent w potoku jest asynchroniczny, jak wspomniał S Nash.)
Co mam na myśli przez "to zależy od twojego cmdlet "? Jeśli mówisz o cmdletach dostarczanych przez Microsoft, prawdopodobnie wszystkie działają tak, jak byś tego oczekiwał, przekazując każdy obiekt przez potok tak skutecznie, jak to tylko możliwe. Ale jeśli mówisz o poleceniach cmdlet, które piszesz, to zależy od tego, jak je piszesz: równie łatwo można pisać polecenia cmdlet, które nie wykonują poprawnego pipeliningu jako te, które się powiodły!
Istnieją dwa zasadnicze rodzaje awarii:
- generujące wszystkie wyjścia przed emitujących każdy do rurociągu lub
- zbierając wszystkie wejścia rurociągu przed przetworzeniem dowolny.
To, co chcesz osiągnąć, to przetwarzanie każdego wejścia zaraz po jego otrzymaniu i emisję sygnału wyjściowego, gdy tylko zostanie to określone.Szczegółowe przykłady wszystkich z nich można znaleźć w moim artykule, Ins and Outs of the PowerShell Pipeline, opublikowanym na stronie Simple-Talk.com.