PowerShell presenta un modelo de canalización de objetos, que le permite enviar objetos enteros a través de la tubería para consumir comandos o (al menos) la salida. A diferencia de la canalización clásica basada en cadenas, la información de los objetos canalizados no tiene que estar en posiciones específicas. Los Commandlets pueden declarar que interactúan con los objetos de la canalización como entrada, mientras que los valores de retorno se envían automáticamente a la canalización.
En la mayoría de los casos, la entrada de la tubería será una matriz de objetos. Aunque el comportamiento del bloque PROCESS{}
puede parecer similar al bloque foreach{}
, omitir un elemento de la matriz requiere un proceso diferente.
Si, como en foreach{}
, usó continue
dentro del bloque PROCESS{}
, se rompería la tubería, omitiendo todas las siguientes declaraciones, incluido el bloque END{}
. En su lugar, use return
: solo finalizará el bloque PROCESS{}
para el elemento actual y se moverá al siguiente.
En algunos casos, es necesario generar el resultado de funciones con codificación diferente. La codificación de la salida de los CmdLets está controlada por la variable $OutputEncoding
. Cuando se pretende que la salida se coloque en una tubería hacia aplicaciones nativas, podría ser una buena idea corregir la codificación para que coincida con el destino $OutputEncoding = [Console]::OutputEncoding
Referencias adicionales:
Artículo del blog con más información sobre $OutputEncoding
https://blogs.msdn.microsoft.com/powershell/2006/12/11/outputencoding-to-the-rescue/