Potresti aver esplorato come funziona il pipeline di PowerShell e come i cmdlet incorporati passano dati da un comando all’altro. Ma sapevi che puoi creare le tue funzioni personalizzate che utilizzano anche il pipeline? Sì! Con un vincolo di parametro, le tue funzioni possono agire proprio come i cmdlet incorporati, accettando senza problemi i dati dal pipeline.
Questo tutorial ti guiderà nell’equipaggiare le tue funzioni personalizzate con il potere del pipeline, trasformando il modo in cui automatizzi e strutturi i tuoi script PowerShell.
Piuttosto che fare affidamento su cicli o input manuali, sblocca nuovi livelli di efficienza e flessibilità nel tuo scripting!
Abilitare l’Input del Pipeline con ValueFromPipeline
Perché la tua funzione possa ricevere informazioni dal pipeline, devi configurare uno o più parametri per accettarlo. Configurerai i parametri per utilizzare l’attributo ValueFromPipeline
o ValueFromPipelineByPropertyName
.
Cominciamo impostando una funzione che installa software su computer multipli per passare un array di nomi di computer ad essa senza utilizzare un ciclo.
Aggiungi l’attributo ValueFromPipeline
al parametro ComputerName
, consentendo a ciascun oggetto del pipeline in arrivo di essere trattato come il parametro ComputerName
.
Con questa configurazione, PowerShell assocerà ciascun oggetto del pipeline in arrivo 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!" } }
Ora, passa un array di nomi di computer alla funzione utilizzando il pipeline.
$computers = @("SRV1", "SRV2", "SRV3") $computers | Install-Software -Version 1
Senza il blocco process
, la funzione gestirebbe solo l’ultimo elemento. Il blocco process
consente alla funzione di elaborare indipendentemente ciascun elemento dell’array.
Binding per nome della proprietà con ValueFromPipelineByPropertyName
Forse hai più proprietà nei tuoi oggetti della pipeline che devono corrispondere ai parametri della tua funzione. Se è così, supponiamo che un file CSV contenga sia i campi ComputerName
che Version
.
Per dimostrare il binding per nome della proprietà, inizia salvando un file CSV contenente queste proprietà:
@( [pscustomobject]@{'ComputerName' = 'SRV1'; 'Version' = 1} [pscustomobject]@{'ComputerName' = 'SRV2'; 'Version' = 2} [pscustomobject]@{'ComputerName' = 'SRV3'; 'Version' = 2} ) | Export-Csv -Path C:\Scripts\software_installs.csv -NoTypeInformation
Aggiorna la funzione per accettare Version
e ComputerName
per nome della proprietà.
Con ValueFromPipelineByPropertyName
, la funzione abbina le proprietà in ciascun oggetto (come quelle importate da un CSV) con i parametri nella funzione.
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!" } }
Ora, usa Import-Csv
per importare il file e invia ciascun oggetto a Install-Software
.
Import-Csv -Path C:\Scripts\software_installs.csv | Install-Software
I campi ComputerName
e Version
di ciascuna riga si legano ai rispettivi parametri nella funzione. Questo approccio consente un’elaborazione semplice in blocco delle installazioni software su più computer con controllo delle versioni.
Conclusione
In questo tutorial, hai imparato come abilitare il supporto per le pipeline nelle funzioni di PowerShell, rendendole più versatili e potenti. Ora puoi progettare funzioni personalizzate che accettano senza problemi i dati dalla pipeline, simili ai cmdlet integrati.
Con le funzioni abilitate per le pipeline, ottieni un controllo più fine sull’input dei dati, semplificando la progettazione degli script e migliorando la leggibilità.
Mentre continui a lavorare con PowerShell, considera l’integrazione di queste tecniche per scrivere funzioni efficienti pronte per le pipeline. Rendi i tuoi script più adattabili ed efficaci nell’automazione delle attività!
Source:
https://adamtheautomator.com/powershell-pipeline-parameters/