PowerShell-Pipeline-Parameter: So erstellen Sie funktionsfähige Pipeline-Funktionen

Sie haben möglicherweise erkundet, wie die PowerShell-Pipeline funktioniert und wie integrierte Cmdlets Daten von einem Befehl zu einem anderen übergeben. Aber wussten Sie, dass Sie Ihre eigenen benutzerdefinierten Funktionen erstellen können, die ebenfalls die Pipeline nutzen? Ja! Mit einer Parameterbindung können Ihre Funktionen genau wie integrierte Cmdlets agieren und nahtlos Daten aus der Pipeline akzeptieren.

Dieses Tutorial wird Sie dabei unterstützen, Ihre benutzerdefinierten Funktionen mit der Macht der Pipeline auszustatten und zu transformieren, wie Sie Ihre PowerShell-Skripte automatisieren und strukturieren.

Statt sich auf Schleifen oder manuelle Eingaben zu verlassen, eröffnen Sie neue Ebenen der Effizienz und Flexibilität in Ihrem Skripting!

Aktivierung der Pipeline-Eingabe mit ValueFromPipeline

Damit Ihre Funktion Informationen aus der Pipeline erhält, müssen Sie einen oder mehrere Parameter konfigurieren, um diese zu akzeptieren. Sie konfigurieren Parameter, um das Attribut ValueFromPipeline oder ValueFromPipelineByPropertyName zu verwenden.

Fangen wir an, eine Funktion einzurichten, die Software auf mehreren Computern installiert, um ein Array von Computernamen zu übergeben, ohne eine Schleife zu verwenden.

Fügen Sie das Attribut ValueFromPipeline dem Parameter ComputerName hinzu, sodass jedes eingehende Pipeline-Objekt als der ComputerName-Parameter behandelt wird.

PowerShell wird jedes eingehende Pipeline-Objekt mit dieser Konfiguration an $ComputerName binden.

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

Jetzt übergeben Sie ein Array von Computernamen an die Funktion über die Pipeline.

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

Ohne den process-Block würde die Funktion nur mit dem letzten Element umgehen. Der process-Block ermöglicht es der Funktion, jedes Element im Array unabhängig zu verarbeiten.

Binding nach Eigenschaftsnamen mit ValueFromPipelineByPropertyName

Vielleicht haben Sie mehrere Eigenschaften in Ihren Pipeline-Objekten, die mit den Parametern Ihrer Funktion übereinstimmen müssen. Nehmen wir an, eine CSV-Datei enthält sowohl die Felder ComputerName als auch Version.

Um das Binding nach Eigenschaftsnamen zu demonstrieren, beginnen Sie damit, eine CSV-Datei mit diesen Eigenschaften zu speichern:

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

Aktualisieren Sie die Funktion, um Version und ComputerName nach Eigenschaftsnamen zu akzeptieren.

Mit ValueFromPipelineByPropertyName gleicht die Funktion Eigenschaften in jedem Objekt (wie die aus einer CSV importierten) mit Parametern in der Funktion ab.

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

Verwenden Sie nun Import-Csv, um die Datei zu importieren, und leiten Sie jedes Objekt an Install-Software.

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

Die Felder ComputerName und Version jeder Zeile binden an die entsprechenden Parameter in der Funktion. Dieser Ansatz ermöglicht eine einfache Massenverarbeitung von Softwareinstallationen auf mehreren Computern mit Versionskontrolle.

Fazit

In diesem Tutorial haben Sie gelernt, wie Sie die Pipeline-Unterstützung in PowerShell-Funktionen aktivieren, wodurch sie vielseitiger und leistungsfähiger werden. Sie können jetzt benutzerdefinierte Funktionen entwerfen, die nahtlos Daten aus der Pipeline akzeptieren, ähnlich wie eingebaute Cmdlets.

Mit pipelinefähigen Funktionen erhalten Sie eine genauere Kontrolle über die Dateneingabe, was das Design von Skripten vereinfacht und die Lesbarkeit verbessert.

Während Sie weiterhin mit PowerShell arbeiten, sollten Sie in Betracht ziehen, diese Techniken zu integrieren, um effiziente, pipelinefähige Funktionen zu schreiben. Machen Sie Ihre Skripte anpassungsfähiger und effektiver bei der Automatisierung von Aufgaben!

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