En CMD, vous pouvez chercher une chaîne de caractère avec findstr, sur Linux, il existe la commande grep.
PowerShell ne déroge pas et permet lui aussi de rechercher une chaîne de caractère avec Select-String.
Dans ce tutoriel, je vous montre comment utiliser le cmdlet Select-String pour rechercher une chaîne de caractères en Powershell.
Vous trouverez plusieurs exemples, de la recherche d’un motif texte à une utilisation plus avancées avec des expressions régulières (regex).
Table des matières
- 1 Quelle est la syntaxe de la commande Select-String
- 2 Comment rechercher une chaîne de caractères en PowerShell avec des exemples
- 2.1 Utilisation basique
- 2.2 Rechercher une correspondance dans les fichiers
- 2.3 Rechercher un motif dans une arborescence complète (récursif)
- 2.4 Rechercher une correspondance respectant la casse
- 2.5 Rechercher des lignes avant et après une correspondance
- 2.6 Trouver les X premières occurrences
- 2.7 Rechercher plusieurs motifs à la fois
- 2.8 Afficher les noms de fichiers, lignes des occurrences
- 2.9 Rechercher une correspondance avec des expressions régulières
- 2.10 Résoudre les problèmes d’accents dans la recherche de chaîne de caractères
- 3 Liens
Quelle est la syntaxe de la commande Select-String
L’applet Select-String de commande (équivalent de grep en PowerShell) travaille sur des lignes de texte et, par défaut, recherche la première correspondance dans chaque ligne, puis affiche le nom du fichier, le numéro de ligne et le texte de la ligne correspondante.
La syntaxe basique est :
Select-String -Pattern <Motif à chercher>
Mais de nombreuses options sont disponibles dont voici la liste :
Paramètres | Description |
AllMatches | Chercher plus d’une correspondance. Un seul objet MatchInfo sera toujours émis pour chaque ligne, mais il contiendra toutes les correspondances trouvées |
CaseSensitive | Les correspondances ne sont pas sensibles à la casse par défaut, ce qui oblige le cmdlet à rechercher les correspondances qui correspondent exactement au modèle d’entrée |
Contexte | Définir le nombre de lignes avant et après la correspondance qui seront affichées. L’ajout de ce paramètre modifie l’objet MatchInfo émis pour inclure une nouvelle propriété Context qui contient les lignes spécifiées |
Culture | Spécifier une culture à faire correspondre avec le motif spécifié. Cela inclut des options telles que en-US, es, ou fr-FR par exemple. D’autres options utiles sont les options Ordinal et Invariant. Ordinal permet d’effectuer des comparaisons binaires non linguistiques et Invariant permet d’effectuer des comparaisons indépendantes de la culture |
Encoding | Spécifier l’encodage du fichier cible à rechercher : ascii, bigendianunicode, oem, unicode, utf7, utf8, utf8BOM, utf8NoBOM, utf32, windows-1251, … |
Exclude | En utilisant le paramètre Path, excluez des éléments spécifiques en utilisant un modèle, tel que *.txt |
Include | Pour inclure un élément. Fonctionne de la même manière que Exclude |
List | Renvoyer uniquement la première instance du texte correspondant de chaque fichier d’entrée. Il s’agit d’un moyen rapide et efficace de récupérer une liste de fichiers dont le contenu correspond |
LiteralPath | Indiquer à Select-String d’utiliser les valeurs en entrée, au lieu d’interpréter des valeurs telles que * comme un caractère générique. Si le chemin comprend des caractères d’échappement, mettez-les entre guillemets simples pour ne pas les interpréter |
NoEmphasis | Au lieu de mettre en évidence la chaîne de caractères sur laquelle le motif est apparié, désactivez la mise en évidence des correspondances. Par défaut, la mise en évidence utilise des couleurs négatives basées sur les couleurs du texte d’arrière-plan |
NotMatch | Rechercher le texte qui ne correspond pas au motif spécifié. |
Path | Spécifier le chemin d’accès aux fichiers à rechercher. Les caractères génériques sont autorisés, mais vous ne pouvez pas spécifier uniquement un répertoire. La valeur par défaut est le répertoire local |
Pattern | Le motif à rechercher dans le contenu ou les fichiers d’entrée en fonction de RegEx |
SimpleMatch | Utiliser une correspondance simple au lieu des expressions régulières |
Raw | Afficher les chaînes de caractères correspondantes, sans objet MatchInfo. C’est le comportement qui ressemble le plus à grep et non à la nature plus orientée objet de PowerShell |
Quiet | Renvoie uniquement un $true ou $false si le motif est trouvé |
Comment rechercher une chaîne de caractères en PowerShell avec des exemples
Utilisation basique
Voici un exemple simple de recherche de chaîne de caractères.
On passe à la phrase à la commande Select-String grâce au caractère Pipe « | ».
"J'aime Malekal car c'est un site où j'apprends des choses."|Select-String -Pattern "malekal"
Ici l’occurrence est trouvée, on voit donc que Select-String est insensible à la casse.
Vous pouvez aussi créer une variable, pour la passer à la commande Select-String.
Le résultat est le même.
$string="J'aime Malekal car c'est un site où j'apprends des choses.`r`nMerci pour tous."
Write-Host $string
$string|Select-String -Pattern "malekal"
Notez que l’on peut aussi utiliser l’option InputObject pour recherche du texte dans une variable :
Select-String -pattern "Malekal" -InputObject $string
Rechercher une correspondance dans les fichiers
Vous pouvez aussi rechercher des motifs dans les fichiers.
Pour cela, il faut utiliser le paramètre -Path.
Spécifiez alors le chemin complet d’un fichier ou utiliser le caractère joker pour rechercher dans plusieurs fichiers, par exemple sur une extension spécifique.
Par exemple, pour rechercher le motif Pierre dans tous les fichiers CSV du bureau.
Select-String -Path "C:\Users\Mak\Desktop\*.csv" -Pattern "Pierre"
Le nom du fichier et le numéro de ligne s’affichent suivis par la ligne contenant la chaîne de caractères trouvée.
Une autre façon de procéder pour rechercher un motif dans les fichiers est d’utiliser le cmdlet Get-ChildItem.
Par exemple pour rechercher le mot Microsoft dans tous les fichiers texte du répertoire system32.
Get-ChildItem -Path C:\Windows\System32\*.txt | Select-String -Pattern 'Microsoft'
Rechercher un motif dans une arborescence complète (récursif)
On peut aussi avoir besoin de rechercher un motif dans un répertoire complet comprenant les sous-répertoire.
Pour effectuer une recherche de chaîne de caractères en récursif, ajoutez l’option -Recurse au cmdlet Get-ChildItem.
Par exemple, pour chercher le mot Microsoft dans TOUS les fichiers texte du dossier system32, y compris, les sous-répertoire :
Get-ChildItem -Path C:\Windows\System32\*.txt -Recurse | Select-String -Pattern 'Microsoft' -CaseSensitive
Si vous devez chercher sur tout un disque, utilisez -Filter pour filtrer sur un type de fichiers.
Par exemple ci-dessous, on recherche sur tout le disque C les fichiers contenant le mot Microsoft.
Get-ChildItem -Recurse C:\ -Filter *.log -ErrorAction SilentlyContinue -ev errs |
Select-String -Pattern 'Microsoft' -SimpleMatch
Rechercher une correspondance respectant la casse
Nous l’avons vu précédemment, la commande Select-String est insensible à la casse comme c’est le cas de tous les commandes de Windows et du système en général.
Si vous devez chercher un motif en étant sensible à la casse, ajoutez l’option -CaseSensitive :
'Malekal', 'MALEKAL' | Select-String -Pattern 'MALEKAL' -CaseSensitive -SimpleMatch
Rechercher des lignes avant et après une correspondance
Vous pouvez aussi obtenir les lignes avant et après le modèle correspondant.
Pour cela, utilisez le paramètre -Context avec la valeur avant et la valeur après séparés par une virgule.
Select-String -Path "C:\Users\Mak\Desktop\*.csv" -Pattern 'Pierre' -Context 2, 3
Le paramètre Context utilise deux valeurs, avant et après, et marque les correspondances de modèle dans la sortie avec un crochet d’angle (>). Le paramètre Context génère les deux lignes avant la première correspondance de modèle et trois lignes après la dernière correspondance de modèle.
Trouver les X premières occurrences
Parfois le nombre d’occurrence trouvée est importante et on peut être intéresser à capturer que les premières.
Pour trouver les X premières occurrences, vous pouvez utiliser le cmdlet Select-Object et son option -First en spécifiques le nombre.
Par exemple pour afficher que les 10 premières occurrences trouvées :
Get-ChildItem -Path C:\Windows\System32\*.txt -Recurse | Select-String -Pattern 'Microsoft'| Select-Object -First 10
Rechercher plusieurs motifs à la fois
Vous pouvez aussi chercher plusieurs chaînes de caractères à la fois.
Pour cela, on sépare les motifs à rechercher par des virgules avec la syntaxe suivante :
Select-String -Path "C:\Users\Mak\Desktop\*.csv" -Pattern "motif1","motif2","motif3"
Par exemple pour trouver toutes les lignes avec soit Pierre, Vincent ou Alice :
Select-String -Path "C:\Users\Mak\Desktop\*.csv" -Pattern "Pierre","Vincent","Alice"
Afficher les noms de fichiers, lignes des occurrences
Toujours en utilisant le cmdlet Select-Object, vous pouvez changer l’affichage des colonnes de la sortie Select-String.
Par exemple, si vous voulez afficher une colonne avec le nom du fichier, Pattern et la ligne trouvé, utilisez la syntaxe suivante :
Select-String -Path "C:\Users\Mak\Desktop\*.csv" -Pattern "Pierre","Vincent","Alice","St.phanie" | Select-Object FileName, Pattern, Line
Rechercher une correspondance avec des expressions régulières
PowerShell est aussi capable d’effectuer des recherches plus avancées à l’aide d’expressions régulières.
Imaginons que vous souhaitez rechercher que les personnes dont la date de naissance a pour année 86.
Vous pouvez alors chercher avec la regex suivante :
Select-String -Path "C:\Users\Mak\Desktop\*.csv" -Pattern '\d\d/\d\d/86'
Et si vous voulez chercher sur des adresses IP, utilisez le regex suivant :
Select-String -Path "C:\Users\Mak\Desktop\*.txt" -Pattern '\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b' | Select-Object -First 10
Résoudre les problèmes d’accents dans la recherche de chaîne de caractères
Un problème courant qui peut se produire dans la recherche de chaîne de caractères en PowerShell est le problème d’accents.
Bien souvent, l’accent ne s’affiche pas correctement et donc la recherche de motif ne fonctionne pas.
Cela vient en général d’un problème d’encodage du fichier.
Vous pouvez corriger et résoudre le problème d’accent avec Select-String en utilisant l’option -Encoding et en spécifiant le bon encodage.
Dans cet exemple, on voit que l’accent s’affiche mal mais si on change l’encodage, l’accent s’affiche comme il faut et Select-String le prend bien en compte dans la recherche de motif.
Select-String -Path "Desktop\*.csv" -Pattern "Stéphanie" -Encoding utf7 | Select-Object FileName, Pattern, Line
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