El parámetro Passthru en PowerShell

El parámetro passthru es utilizado con frecuencia, pero sin conocer realmente que es lo que permite realizar, o al menos que es lo que hace de manera simple. Básicamente permite agregar una salida a cmdlets que no tienen esta función por defecto, es decir que agrega una funcionalidad o extiende el uso de ciertos cmdlets.

Su principal uso o por lo que la mayoría de las personas utilizan el parámetro passthru es la posibilidad de verificar que es lo que hace un cmdlet en particular o que se pretende lograr como resultado.

Usando el parámetro passthru

Todos conocemos varios cmdlets que devuelven “ cosas” por defecto: los que empiezan con Get, New, Set de los módulos que manejamos a diario de seguro nos arrojan información a la consola de manera predeterminada. Pero como comentamos anteriormente, en otros no ocurren acciones de salida. Cumple lo anterior el cmdlet Copy-Item, simplemente copia el o los objetos desde el origen al destino sin acusar nada luego de finalizado, veamos un pequeño ejemplo:

Copy-Item -Path C:\Temp\File.txt -Destination .\Desktop

Otro ejemplo que clarifica esta situación se presenta al utilizar el cmdlet Get-Process:

Get-Process | Out-File C:\reports\Process.txt

Estos son dos ejemplos típicos de comandos que no tiene salida y que en el uso diario capaz que no es necesario tener una salida. ¿Y que sucede si en cierta situación requerimos tener un resultado? Para poder resolver el requerimiento es necesario recurrir al parámetro passthru, de la siguiente manera:

Copy-Item -Path C:\Temp\File.txt -Destination .\Desktop -Passthru

Obteniendo el siguiente resultado:

Copy-Item con el parámetro Passthru

Encontrar comandos con el parámetro passthru

Para obtener una lista con todos los cmdlets que cuentan con el parámetro passthru disponibles para usar debemos ejecutar algo como la siguiente línea:

Get-Command -PipelineVariable commands | `
where { $_.ParameterSets.Parameters.Name -eq "PassThru" } | ForEach-Object {$commands}

Tomando como referencia los cmdlets disponibles según los módulos actuales en la consola.

Happy scripting!

Comments