PowerShell: creación de funciones que aceptan entradas de canalización (ByValue)
Probablemente ya haya creado su primera función en PowerShell y ahora desea que su función sea capaz de realizar entradas de canalización. ¿Bien? Ok, has venido al lugar correcto. En esta publicación de blog, crearé una función de muestra que acepta entradas de canalización por valor.
Función de muestra
Tomemos esta función de muestra para nuestro experimento. Tiene un único parámetro llamado “Texto”.
function Test-PipelineInput {
param
(
[Parameter()]
$Text
)
Write-Host "$Text"
}
Una vez ejecutado, escribe el texto ingresado en el parámetro Texto, como se esperaba.
Sin embargo, si intenta canalizar el texto del lado izquierdo de la tubería hacia el lado derecho de la tubería, aparecerá un mensaje de error.
El mensaje de error dice:
Test-PipelineInput: el objeto de entrada no puede vincularse a ningún parámetro para el comando porque el comando sí lo hace
no toma la entrada de la canalización o la entrada y sus propiedades no coinciden con ninguno de los parámetros que toman la entrada de la canalización.
ValorDePipeline=$verdadero
Entonces, tenemos que configurar nuestro parámetro para aceptar la entrada de canalización. El código ahora se ve así:
function Test-PipelineInput {
param
(
[Parameter(ValueFromPipeline=$true)]
$Text
)
Write-Host "$Text"
}
Esto funciona bien.
¿Qué pasará si ingresamos dos textos diferentes?
A través del pipeline sólo se procesa el segundo texto. ¿Por qué?
Debido a que una función que no tiene una declaración de proceso es siempre una función END, eso significa que solo el segundo objeto (Hello World2) se enviará a través de la canalización.
Si se pregunta qué significa ByValue, consulte aquí: Comprensión del enlace de parámetros de canalización de PowerShell
Debe tener: Inicio - Proceso - Fin
Nuestra función de trabajo final se parece al ejemplo siguiente. Tenga en cuenta que no tenemos código de inicio ni de finalización, por lo que decidí dejar ambas declaraciones vacías. Recuerde que son obligatorios para la funcionalidad del canal.
function Test-PipelineInput {
param
(
[Parameter(ValueFromPipeline=$true)]
$Text
)
Begin {}
Process {
Write-Host "$Text"
}
End {}
}
Eso se ve bien. Está todo bien.
¡Hasta la próxima con PowerShell!




