Powershell - Présentation de la syntaxe basique de Where-Object et de ses limites

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!

La syntaxe basique/simplifiée apparue avec Windows Powershell 3 est plus simple à appréhender mais plus limitée que la syntaxe standard/avancée.

Dans mes tests, elle est aussi légèrement plus rapide en Powershell 7 (7.4.4) et moins en Windows Powershell 5.1.

# Syntaxe standard/avancée
Get-Service | Where-Object -FilterScript { $_.Status -eq 'running' }
# Syntaxe basique/simplifiée
Get-Service | Where-Object -Property Status -eq 'running'
# Mais on les voit le plus souvent cette forme (sans l'argument après Where-Object)
Get-Service | Where-Object { $_.Status -eq 'running' }
Get-Service | Where-Object Status -eq 'running'

Mais la syntaxe basique possède quelques limitations.

La syntaxe de base ne peut être utilisée que pour une seule comparaison.

# Cette syntaxe ne fonctionne pas
Get-Service | Where-Object -Property Status -eq 'running' -and StartType -eq 'Automatic'
# Il est nécessaire d'utiliser la syntaxe standard
Get-Service | Where-Object -FilterScript {$_.Status -eq 'running' -and $_.StartType -eq 'Automatic'}

On ne peut pas utiliser une propriété de propriété avec la syntaxe de base.

# Cette syntaxe ne fonctionne pas
Get-Process | Where-Object -Property Name.Length -lt 5
# Il est nécessaire d'utiliser la syntaxe standard
Get-Process| Where-Object -FilterScript { $_.Name.Length -lt 5 }

Liens en relation