Lorsque vous travaillez avec des valeurs de propriétés PowerShell dans une collection d’objets, vous avez parfois besoin d’un moyen de filtrer tous les éléments dont vous n’avez pas besoin. Savoir utiliser la cmdlet PowerShell Where-Object est une compétence importante à avoir dans sa boîte à outils PowerShell.
La cmdlet Where-Object est un moyen pratique de filtrer des objets. Dans ce tutoriel, vous apprendrez les différentes façons d’utiliser la commande Where-Object, les paramètres disponibles, la syntaxe, ainsi que la façon d’utiliser des conditions multiples comme un pro !
Table des matières
Comprendre le fonctionnement de Where-Object
Where-Object est une cmdlet utilisée pour filtrer les objets du pipeline. Vous pouvez transmettre une collection d’objets à la cmdlet, puis fournir un filtre pour sélectionner uniquement les objets que vous souhaitez renvoyer.
Il existe deux jeux de paramètres courants pour Where-Object.
- Le premier tire parti des différents paramètres de Where-Object
- Le second vous permet d’utiliser un bloc de script pour composer des requêtes plus avancées
Examinons le premier type de filtrage. Nous allons filtrer les processus sur la machine en fonction de leur nom.
Get-Process | Where-Object Name -eq 'Notepad'
La ligne de commande ci-dessus sélectionnera les processus dont le nom est Notepad. Lorsque vous décidez comment filtrer les objets renvoyés par une cmdlet particulière, vous pouvez utiliser Get-Member pour voir les propriétés disponibles sur l’objet.
Pour créer des requêtes plus complexes, vous pouvez utiliser un bloc de script. La commande suivante permet d’obtenir le même résultat que l’objet précédent.
Get-Process | Where-Object { $_.Name -eq 'notepad' }
Les accolades indiquent le début et la fin d’un bloc de script. Il est similaire à une fonction. Ce bloc de script Where-Object est appelé pour chaque processus renvoyé par Get-Process. La variable $_ est utilisée pour indiquer l’objet actuel dans le tableau des objets renvoyés.
Where-Object de PowerShell est de loin l’outil le plus utilisé pour filtrer des données. Cela est dû principalement à sa puissance et, en même temps, à sa simplicité. Il sélectionne les objets d’une collection en fonction des valeurs de leurs propriétés.
Il existe d’autres cmdlets qui permettent de filtrer les données comme le cmdlet Select-Object.
Comment utiliser Where-Object de PowerShell pour filtrer les éléments
Utiliser le paramètre contains
Les opérateurs de confinement sont utiles lorsque l’on travaille avec des collections. Ils permettent de définir une condition. Il existe plusieurs exemples d’opérateurs de confinement que nous pouvons utiliser. En voici quelques-uns :
- -contains / -ccontains – Filtre une collection contenant une valeur de propriété
- -notcontains / -cnotcontains – Filtre une collection qui ne contient pas de valeur de propriété
- -in / -cin – se trouve dans une collection, renvoie la valeur de la propriété si une correspondance est trouvée
- -notin / -cnotin – n’est pas dans une collection, null/$false s’il n’y a pas de valeur de propriété
Voici un exemple de leur utilisation où on liste les services Windows contenant le mots BITS :
Get-Service | Where-Object -Property Name -Contains 'BITS'
Utiliser les opérateurs de correspondance
Dans PowerShell, vous disposez de plusieurs opérateurs de correspondance différents que vous pouvez utiliser dans le cadre de la fonction Where-Object.
- -like / -clike – correspond à un motif de caractère générique
- -notlike / -cnotlike – ne correspond pas à un motif de caractère générique
- -match / -cmatch – La chaîne de caractères correspond au motif de l’expression rationnelle
- -notmatch / -cnotmatch – la chaîne ne correspond pas au motif de l’expression rationnelle
Voici un exemple pour lister les processus dont le nom ne contient pas le mot Host :
Get-Process | Where-Object ProcessName -NotLike "*host"
Utiliser les opérateurs d’égalité
Il existe un grand nombre d’opérateurs d’égalité. En voici quelques-uns :
- –eq / -ceq – valeur égale à la valeur spécifiée
- -ne / -cne –la valeur n’est pas égale à la valeur spécifiée
- -gt / -cgt – valeur supérieure à la valeur spécifiée
- -ge / -cge – valeur supérieure ou égale à la valeur spécifiée
- -lt / -clt – valeur inférieure à la valeur spécifiée
- -le / -cle – valeur inférieure ou égale à la valeur spécifiée
Cet exemple filtrel es services Windows dont le type de démarrage est automatique :
Get-Service | Where-Object -Property StartType -EQ 'Automatic'
Comment utiliser Where-Object avec des exemples
Filtrer par nom
Vous pouvez très facilement filtrer par le nom grâce à Where-Object.
Par exemple pour filtrer les services Windows dont le nom est RpcSs, on utilise l’opérateur -Containts :
Get-Service | Where-Object -Property Name -Contains 'RpcSs'
Et si vous souhaitez filtrer les services contenant un mot spécifique, utilisez l’opérateur -Match :
Get-Service | Where-Object -Property Name -Match 'rpc'
Pour rechercher dans le dossier de téléchargement, les fichiers dont le nom commence par Mail :
Get-ChildItem -path 'c:\users\Mak\downloads' | Where-Object {$_.BaseName -match 'Mail*'}
Son équivalent est :
Get-ChildItem -path 'C:\users\Mak\downloads' | Where-Object BaseName -match 'Mail*'
Filtrer par date
Nous pouvons utiliser les mêmes commandes, Get-ChildItem et Where-Object, pour rechercher des fichiers en fonction des dates. Supposons que nous voulions trouver tous les fichiers qui ont été créés ou mis à jour au cours de la semaine dernière.
Nous utilisons la propriété LastWriteTime et les paramètres Get-Date et AddDays pour y parvenir. Cela fonctionne à merveille.
Voici comment faire :
Get-ChildItem | Where-Object {$_.LastWriteTime -gt (Get-Date).AddDays(-7)}
Recherche de fichiers d’un type et d’une taille spécifique
Vous avez déjà vu quelques exemples de la commande -filter ci-dessus. Il s’agit du principal exemple d’utilisation des paramètres de filtre dans vos commandes et vos scripts. Il vous permet de vous concentrer sur les données précises que vous recherchez.
Voici un exemple qui filtre les fichiers ZIP avec une taille supérieur à 150 Mo.
Get-ChildItem -Path 'C:\users\Mak\Downloads' -filter *.zip | where-Object Length -ge 150000
Utiliser plusieurs opérateurs
Ce cmdlet vous permet également d’utiliser des opérateurs logiques pour relier plusieurs expressions. Vous pouvez évaluer plusieurs conditions dans un seul bloc de script. Voici quelques exemples.
- -and – Le bloc de script évalue True si les expressions sont toutes deux évaluées logiquement comme True.
- -or – Le bloc est évalué à Vrai si l’une des expressions de chaque côté est Vrai.
- -xor – Le bloc de script est évalué comme Vrai lorsque l’une des expressions est Vraie et l’autre Fausse.
- -not ou ‘!’ – Annule l’élément de script qui le suit.
get-command | Where-Object {($_.Name -like '*import*') -and ($_.CommandType -eq 'cmdlet')}
Filtrer les processus selon l’utilisation CPU
Ce dernier exemple liste les processus en cours d’exécution dont l’utilisation CPU est compris entre 2 et 10%.
Get-Process | Where-Object {($_.CPU -gt 2.0) -and ($_.CPU -lt 10)}
Liens
- Qu’est-ce que PowerShell sur Windows 10, 11 : exemple de commandes
- PowerShell et CMD (invite de commandes) : les différences
- 14 commandes PowerShell de base pour apprendre et débuter
- La liste des commandes PowerShell
- Les virus ou trojan PowerShell
- Comment exécuter un script PowerShell
- PowerShell Get-Process : gestion des processus
- Exécution script désactivée PowerShell : Autoriser l’exécution de Scripts dans PowerShell
- Lancer PowerShell depuis CMD
- PowerShell : créer et écrire dans un fichier
- PowerShell : installer, désinstaller, lister les applications
- Comment utiliser Where-Object de PowerShell pour filtrer les éléments
- Créer, supprimer, formater des partitions de disque en PowerShell
- Ajouter, supprimer et modifier des comptes utilisateurs et des groupes locaux avec PowerShell
- Comment créer une tâche planifiée en PowerShell
- Configurer les tâches planifiées en PowerShell
- Comment gérer Windows Defender avec PowerShell
- Comment copier ou déplacer des fichiers avec PowerShell
- PowerShell : gérer les partages réseaux et de dossiers de Windows 10
- Les commandes réseaux PowerShell sur Windows 10, 11
- Gérer les services Windows en PowerShell
- PowerShell : supprimer un fichier avec 10 exemples
- PowerShell : tester l’existence fichier
- PowerShell : rechercher une chaîne de caractères avec Select-String
- Comment mettre à jour PowerShell sur Windows