PowerShell Pipeline Parameters: Hoe functies gereed maken voor gebruik in de pipeline

Je hebt misschien onderzocht hoe de PowerShell-pijplijn werkt en hoe ingebouwde cmdlets gegevens van het ene commando naar het andere doorgeven. Maar wist je dat je je eigen aangepaste functies kunt maken die ook de pijplijn gebruiken? Ja! Met een parameterbinding kunnen je functies zich gedragen als ingebouwde cmdlets, die naadloos gegevens uit de pijplijn accepteren.

Deze tutorial zal je begeleiden bij het uitrusten van je aangepaste functies met de kracht van de pijplijn, waardoor je de manier waarop je je PowerShell-scripts automatiseert en structureert transformeert.

In plaats van te vertrouwen op lussen of handmatige invoer, ontgrendel nieuwe niveaus van efficiëntie en flexibiliteit in je scripting!

Pijplijninvoer inschakelen met ValueFromPipeline

Om ervoor te zorgen dat je functie informatie van de pijplijn ontvangt, moet je een of meer parameters configureren om dit te accepteren. Je configureert parameters om het ValueFromPipeline of ValueFromPipelineByPropertyName-attribuut te gebruiken.

Laten we beginnen met het opzetten van een functie die software op meerdere computers installeert, zodat je een array van computernamen naar deze functie kunt doorgeven zonder een lus te gebruiken.

Voeg het ValueFromPipeline-attribuut toe aan de ComputerName-parameter, zodat elk binnenkomend pijplijnobject als de ComputerName-parameter kan worden behandeld.

PowerShell zal elk binnenkomend pijplijnobject aan $ComputerName binden met deze opzet.

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!"
    }
}

Nu, geef een array van computernamen door aan de functie met behulp van de pijplijn.

$computers = @("SRV1", "SRV2", "SRV3")
$computers | Install-Software -Version 1

Zonder de process blok zou de functie alleen het laatste item verwerken. Het process blok stelt de functie in staat om elk item in de array onafhankelijk te verwerken.

Binding op Eigenschapsnaam met ValueFromPipelineByPropertyName

Misschien heb je meerdere eigenschappen in je pipeline-objecten die moeten overeenkomen met de parameters van je functie. Als dat zo is, laten we aannemen dat een CSV-bestand zowel de ComputerName als Version velden bevat.

Om binding op eigenschapsnaam te demonstreren, begin met het opslaan van een CSV-bestand met deze eigenschappen:

@(
    [pscustomobject]@{'ComputerName' = 'SRV1'; 'Version' = 1}
    [pscustomobject]@{'ComputerName' = 'SRV2'; 'Version' = 2}
    [pscustomobject]@{'ComputerName' = 'SRV3'; 'Version' = 2}
) | Export-Csv -Path C:\Scripts\software_installs.csv -NoTypeInformation

Update de functie om Version en ComputerName door eigenschapsnaam te accepteren.

Met ValueFromPipelineByPropertyName matcht de functie eigenschappen in elk object (zoals die geïmporteerd vanuit een CSV) met parameters in de functie.

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!"
    }
}

Gebruik nu Import-Csv om het bestand te importeren en pipet elk object naar Install-Software.

Import-Csv -Path C:\Scripts\software_installs.csv | Install-Software

De ComputerName en Version velden van elke rij binden aan de respectieve parameters in de functie. Deze benadering maakt gemakkelijke bulkverwerking van software-installaties op meerdere computers met versiebeheer mogelijk.

Conclusie

In deze tutorial heb je geleerd hoe je pipeline-ondersteuning kunt inschakelen in PowerShell-functies, waardoor ze veelzijdiger en krachtiger worden. Je kunt nu aangepaste functies ontwerpen die naadloos gegevens van de pipeline accepteren, vergelijkbaar met ingebouwde cmdlets.

Met pipeline-geactiveerde functies krijg je meer controle over gegevensinvoer, wat het ontwerpen van scripts vereenvoudigt en de leesbaarheid verbetert.

Terwijl je verder werkt met PowerShell, overweeg dan om deze technieken te integreren om efficiënte, pipeline-klaar functies te schrijven. Maak je scripts aanpasbaarder en effectiever in het automatiseren van taken!

Source:
https://adamtheautomator.com/powershell-pipeline-parameters/