Paramètres de pipeline PowerShell : Comment créer des fonctions prêtes pour le pipeline

Vous avez peut-être exploré comment fonctionne le pipeline PowerShell et comment les cmdlets intégrées passent des données d’une commande à une autre. Mais saviez-vous que vous pouvez créer vos propres fonctions personnalisées qui utilisent également le pipeline ? Oui ! Avec un liaison de paramètres, vos fonctions peuvent agir comme des cmdlets intégrées, acceptant sans effort des données du pipeline.

Ce tutoriel vous guidera pour doter vos fonctions personnalisées du pouvoir du pipeline, transformant ainsi la façon dont vous automatisez et structurez vos scripts PowerShell.

Au lieu de compter sur des boucles ou des entrées manuelles, débloquez de nouveaux niveaux d’efficacité et de flexibilité dans votre script !

Activation de l’entrée du pipeline avec ValueFromPipeline

Pour que votre fonction reçoive des informations du pipeline, vous devez configurer un ou plusieurs paramètres pour l’accepter. Vous configurerez les paramètres pour utiliser l’attribut ValueFromPipeline ou ValueFromPipelineByPropertyName.

Commençons par configurer une fonction qui installe des logiciels sur plusieurs ordinateurs afin de lui passer un tableau de noms d’ordinateurs sans utiliser de boucle.

Ajoutez l’attribut ValueFromPipeline au paramètre ComputerName, permettant à chaque objet de pipeline entrant d’être traité comme le paramètre ComputerName.

PowerShell liera chaque objet de pipeline entrant à $ComputerName avec cette configuration.

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

Maintenant, passez un tableau de noms d’ordinateurs à la fonction en utilisant le pipeline.

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

Sans le bloc process, la fonction ne traiterait que le dernier élément. Le bloc process permet à la fonction de traiter indépendamment chaque élément dans le tableau.

Liaison par nom de propriété avec ValueFromPipelineByPropertyName

Peut-être avez-vous plusieurs propriétés dans les objets de votre pipeline qui doivent correspondre aux paramètres de votre fonction. Si c’est le cas, supposons qu’un fichier CSV contienne à la fois les champs ComputerName et Version.

Pour démontrer la liaison par nom de propriété, commencez par enregistrer un fichier CSV contenant ces propriétés :

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

Mettez à jour la fonction pour accepter Version et ComputerName par nom de propriété.

Avec ValueFromPipelineByPropertyName, la fonction associe les propriétés dans chaque objet (comme ceux importés à partir d’un CSV) avec les paramètres de la fonction.

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

Maintenant, utilisez Import-Csv pour importer le fichier et transmettez chaque objet à Install-Software.

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

Les champs ComputerName et Version de chaque ligne se lient aux paramètres respectifs de la fonction. Cette approche permet un traitement en masse facile des installations de logiciels sur plusieurs ordinateurs avec un contrôle de version.

Conclusion

Dans ce tutoriel, vous avez appris comment activer la prise en charge de pipeline dans les fonctions PowerShell, les rendant ainsi plus polyvalentes et puissantes. Vous pouvez désormais concevoir des fonctions personnalisées qui acceptent facilement des données provenant du pipeline, de manière similaire aux cmdlets intégrés.

Avec des fonctions activées pour le pipeline, vous obtenez un contrôle plus précis sur les données d’entrée, simplifiant la conception du script et améliorant sa lisibilité.

En continuant à travailler avec PowerShell, envisagez d’intégrer ces techniques pour écrire des fonctions efficaces prêtes pour le pipeline. Rendez vos scripts plus adaptables et efficaces dans l’automatisation des tâches!

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