Powershell - Jouer avec l'argument -PipelineVariable

Pour me soutenir, vous pouvez vous abonner à la chaîne, partager et liker les vidéos, désactiver votre bloqueur de pub ou encore faire un don. Merci!

Bonjour,

Dans PowerShell, le paramètre -PipelineVariable stock la valeur du pipeline courant comme variable pour une cmdlet dans les flux du pipeline.

Cela permet d’obtenir des résultats intéressant quand on utilise le pipeline.

Un grand nombre de commandes supportent le paramètre -PipelineVariable.

#Lister les cmdlets avec le paramètre pipelinevariable
Get-Command -ParameterName pipelinevariable
# Exemple pour la création d'une arborescence
2021, 2022 |
ForEach-Object -PipelineVariable annee -process { $_ } |
Foreach-Object -PipelineVariable mois -process {
1..12 | ForEach-Object {(Get-culture).DateTimeFormat.GetMonthName($_)}} |
ForEach-Object -process {
'{0}\{1}' -f $annee, $mois
#mkdir ( '{0}\{1}' -f $annee, $mois )
}
# Résultat
2021\janvier
2021\février
...
2022\novembre
2022\décembre
# $année contient le résultat de "2021, 2022 | ForEach-Object -process { $_ }"
# $mois contient le résultat de "Foreach-Object -process { 1..12 | ForEach-Object {(Get-culture).DateTimeFormat.GetMonthName($_)}}"
# En utilisant une autre syntaxe sans -pipelinevariable pour aider à clarifier le comportement précédent et notamment l'imbrication de boucle
foreach ($annee in 2021, 2022) {
foreach ($mois in (1..12 | ForEach-Object {(Get-culture).DateTimeFormat.GetMonthName($_)})) {
'{0}\{1}' -f $annee, $mois
#mkdir ( '{0}\{1}' -f $annee, $mois )
}
}
# Un autre exemple pour listant l'appartenance au groupe d'un utilisateur dans l'AD avec -PipelineVariable
Get-ADUser guillaume -PipelineVariable user -Properties memberof |
Select-Object -ExpandProperty memberof |
Select-Object @{ name = 'Nom'; expression = { $user.Name }},
@{ name = 'MembreDe' ; expression = { $_ -replace 'CN=|,(OU|CN)=.+' }}
# Si la cmdlet n'a pas le paramètre -PipelineVariable il est aussi possible de passer par un Where-Object
1, 2, 3, 4 | Where-Object { $true } -PipelineVariable demo | ForEach-Object -Process { $demo }

Liens en relation