Es posible que hayas explorado cómo funciona la canalización de PowerShell y cómo los cmdlets integrados pasan datos de un comando a otro. Pero ¿sabías que puedes crear tus propias funciones personalizadas que también utilizan la canalización? ¡Sí! Con una vinculación de parámetros, tus funciones pueden actuar como los cmdlets integrados, aceptando datos de manera fluida desde la canalización.
Este tutorial te guiará para equipar tus funciones personalizadas con el poder de la canalización, transformando la forma en que automatizas y estructuras tus scripts de PowerShell.
¡En lugar de depender de bucles o entradas manuales, desbloquea nuevos niveles de eficiencia y flexibilidad en tus scripts!
Permitiendo la entrada de la canalización con ValueFromPipeline
Para que tu función reciba información de la canalización, debes configurar uno o más parámetros para aceptarla. Configurarás los parámetros para usar el atributo ValueFromPipeline
o ValueFromPipelineByPropertyName
.
Comencemos configurando una función que instale software en múltiples computadoras para pasarle un array de nombres de computadoras sin utilizar un bucle.
Agrega el atributo ValueFromPipeline
al parámetro ComputerName
, permitiendo que cada objeto de canalización entrante sea tratado como el parámetro ComputerName
.
Con esta configuración, PowerShell vinculará cada objeto de canalización entrante a $ComputerName
.
function Install-Software { param( [Parameter(Mandatory)] [ValidateSet(1,2)] [int]$Version, [Parameter(Mandatory, ValueFromPipeline)] [string]$ComputerName ) process { Write-Host "I installed software version $Version on $ComputerName. Yippee!" } }
Ahora, pasa un array de nombres de computadoras a la función utilizando la canalización.
$computers = @("SRV1", "SRV2", "SRV3") $computers | Install-Software -Version 1
Sin el bloque process
, la función solo manejaría el último elemento. El bloque process
permite que la función procese independientemente cada elemento en el array.
Vinculación por Nombre de Propiedad con ValueFromPipelineByPropertyName
Quizás tiene múltiples propiedades en sus objetos del pipeline que necesitan coincidir con los parámetros de su función. Si es así, supongamos que un archivo CSV contiene tanto los campos ComputerName
como Version
.
Para demostrar la vinculación por nombre de propiedad, comience guardando un archivo CSV que contenga estas propiedades:
@( [pscustomobject]@{'ComputerName' = 'SRV1'; 'Version' = 1} [pscustomobject]@{'ComputerName' = 'SRV2'; 'Version' = 2} [pscustomobject]@{'ComputerName' = 'SRV3'; 'Version' = 2} ) | Export-Csv -Path C:\Scripts\software_installs.csv -NoTypeInformation
Actualice la función para aceptar Version
y ComputerName
por nombre de propiedad.
Con ValueFromPipelineByPropertyName
, la función hace coincidir las propiedades en cada objeto (como las importadas desde un CSV) con los parámetros en la función.
function Install-Software { param( [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [ValidateSet(1,2)] [int]$Version, [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [string]$ComputerName ) process { Write-Host "I installed software version $Version on $ComputerName. Yippee!" } }
Ahora, use Import-Csv
para importar el archivo y canalice cada objeto a Install-Software
.
Import-Csv -Path C:\Scripts\software_installs.csv | Install-Software
Cada campo ComputerName
y Version
de cada fila se vincula a los respectivos parámetros en la función. Este enfoque permite un fácil procesamiento masivo de instalaciones de software en múltiples computadoras con control de versiones.
Conclusión
En este tutorial, aprendiste cómo habilitar el soporte para tuberías en funciones de PowerShell, haciéndolas más versátiles y poderosas. Ahora puedes diseñar funciones personalizadas que acepten datos de la tubería sin problemas, similar a los cmdlets incorporados.
Con funciones habilitadas para tuberías, obtienes un control más preciso sobre la entrada de datos, simplificando el diseño de scripts y mejorando la legibilidad.
A medida que continúas trabajando con PowerShell, considera integrar estas técnicas para escribir funciones eficientes y listas para tuberías. ¡Haz que tus scripts sean más adaptables y efectivos en la automatización de tareas!
Source:
https://adamtheautomator.com/powershell-pipeline-parameters/