Select-String
Recherche du texte dans des chaînes et des fichiers.
Syntaxe
Select-String [-Path] <string[]> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>]
Select-String -InputObject <psobject> [-Pattern] <string[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <string>] [-Exclude <string[]>] [-Include <string[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] [<CommonParameters>]
Description
L'applet de commande Select-String recherche du texte et des modèles de texte dans des chaînes d'entrée et des fichiers. Vous pouvez l'utiliser de la même manière que Grep dans UNIX et Findstr dans Windows.
Select-String est basée sur des lignes de texte. Par défaut, Select-String recherche la première correspondance dans chaque ligne et, pour chaque correspondance, elle affiche le nom de fichier, le numéro de ligne et tout le texte de la ligne contenant la correspondance.
Cependant, vous pouvez lui demander de détecter plusieurs correspondances par ligne, d'afficher le texte situé avant et après la correspondance, ou d'afficher uniquement une valeur booléenne (true ou false) qui indique si une correspondance a été trouvée.
Select-String utilise la correspondance d'expression régulière, mais elle peut également exécuter une correspondance simple qui recherche l'entrée du texte que vous spécifiez.
Select-String peut afficher toutes les correspondances de texte ou s'arrêter après la première correspondance dans chaque fichier d'entrée. Elle peut également afficher tout le texte qui ne correspond pas au modèle spécifié.
Vous pouvez également spécifier que Select-String doit attendre un encodage de caractères particulier, comme lorsque vous recherchez des fichiers de texte Unicode.
Paramètres
-AllMatches
Recherche plusieurs correspondances dans chaque ligne de texte. Sans ce paramètre, Select-String recherche uniquement la première correspondance dans chaque ligne de texte.
Lorsque Select-String trouve plusieurs correspondances dans une ligne de texte, elle émet encore un objet MatchInfo pour la ligne, mais la propriété Matches de l'objet contient toutes les correspondances.
Obligatoire ? |
false |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
-CaseSensitive
Rend les correspondances sensibles à la casse. Par défaut, les correspondances ne respectent pas la casse.
Obligatoire ? |
false |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
-Context <Int32[]>
Capture le nombre spécifié de lignes avant et après la ligne contenant la correspondance. Cela vous permet de voir la correspondance dans son contexte.
Si vous entrez un nombre en tant que valeur de ce paramètre, ce nombre détermine le nombre de lignes capturées avant et après la correspondance. Si vous entrez deux nombres en tant que valeur, le premier nombre détermine le nombre de lignes avant la correspondance et le deuxième le nombre de lignes après celle-ci.
Dans l'affichage par défaut, les lignes comportant une correspondance sont indiquées par un signe supérieur (ASCII 62) dans la première colonne de l'affichage. Les lignes non marquées constituent le contexte.
Ce paramètre ne change pas le nombre d'objets générés par Select-String. Select-String génère un objet MatchInfo (Microsoft.PowerShell.Commands.MatchInfo) pour chaque correspondance. Le contexte est stocké sous la forme d'un tableau de chaînes dans la propriété Context de l'objet.
Lorsque vous dirigez la sortie d'une commande Select-String vers une autre commande Select-String, la commande de réception recherche uniquement le texte de la ligne de correspondance (valeur de la propriété Line de l'objet MatchInfo), pas le texte des lignes de contexte. Par conséquent, le paramètre Context n'est pas valide sur la commande Select-String de réception.
Lorsque le contexte inclut une correspondance, l'objet MatchInfo de chaque correspondance contient toutes les lignes de contexte, mais les lignes se chevauchant apparaissent une seule fois dans l'affichage.
Obligatoire ? |
false |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
-Encoding <string>
Spécifie l'encodage de caractères que Select-String doit assumer lors de la recherche du fichier. La valeur par défaut est UTF8.
Les valeurs valides sont « UTF7 », « UTF8 », « UTF32 », « ASCII », « Unicode », « BigEndianUnicode », « Default » et « OEM ». « Default » est l'encodage de la page de codes ANSI actuelle du système. « OEM » est l'identificateur de la page de codes du fabricant d'ordinateurs OEM actuel pour le système d'exploitation.
Obligatoire ? |
false |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
-Exclude <string[]>
Excluez les éléments spécifiés. La valeur de ce paramètre qualifie le paramètre Path. Entrez un élément ou un modèle de chemin d'accès, tel que « *.txt ». Les caractères génériques sont autorisés.
Obligatoire ? |
false |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
-Include <string[]>
Incluez uniquement les éléments spécifiés. La valeur de ce paramètre qualifie le paramètre Path. Entrez un élément ou un modèle de chemin d'accès, tel que « *.txt ». Les caractères génériques sont autorisés.
Obligatoire ? |
false |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
-InputObject <psobject>
Spécifie le texte à rechercher. Entrez une variable contenant le texte, ou tapez une commande ou une expression permettant d'obtenir ce texte.
Obligatoire ? |
true |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
true (ByValue) |
Accepter les caractères génériques ? |
false |
-List
Retourne uniquement la première correspondance de chaque fichier d'entrée. Par défaut, Select-String retourne un objet MatchInfo pour chaque correspondance trouvée.
Obligatoire ? |
false |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
-NotMatch
Recherche le texte ne correspondant pas au modèle spécifié.
Obligatoire ? |
false |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
-Path <string[]>
Spécifie le chemin d'accès aux fichiers à rechercher. Les caractères génériques sont autorisés. L'emplacement par défaut est le répertoire local.
Spécifiez des fichiers du répertoire, tels que « log1.txt », « *.doc » ou « *.* ». Si vous spécifiez uniquement un répertoire, la commande échoue.
Obligatoire ? |
true |
Position ? |
2 |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
true (ByPropertyName) |
Accepter les caractères génériques ? |
false |
-Pattern <string[]>
Spécifie le texte à rechercher. Tapez une chaîne ou une expression régulière. Si vous tapez une chaîne, utilisez le paramètre SimpleMatch.
Pour en savoir plus sur les expressions régulières, consultez about_Regular_Expressions.
Obligatoire ? |
true |
Position ? |
1 |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
-Quiet
Retourne une valeur booléenne (true ou false), au lieu d'un objet MatchInfo. Si un modèle est trouvé, la valeur est « true » ; sinon, elle est « false ».
Obligatoire ? |
false |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
-SimpleMatch
Utilise une correspondance simple plutôt qu'une correspondance d'expression régulière. Dans une correspondance simple, Select-String recherche l'entrée de texte dans le paramètre Pattern. Elle n'interprète pas la valeur du paramètre Pattern en tant qu'instruction d'expression régulière.
Obligatoire ? |
false |
Position ? |
named |
Valeur par défaut |
|
Accepter l'entrée de pipeline ? |
false |
Accepter les caractères génériques ? |
false |
<CommonParameters>
Cette applet de commande prend en charge les paramètres courants : -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer et -OutVariable. Pour plus d'informations, consultez about_Commonparameters.
Entrées et sorties
Le type d'entrée est le type des objets que vous pouvez diriger vers l'applet de commande. Le type de retour est le type des objets que l'applet de commande retourne.
Entrées |
System.Management.Automation.PSObject Vous pouvez diriger tout objet ayant une méthode ToString vers Select-String. |
Sorties |
Microsoft.PowerShell.Commands.MatchInfo ou System.Boolean Par défaut, la sortie est un jeu d'objets MatchInfo, un pour chaque correspondance trouvée. Si vous utilisez le paramètre Quiet, la sortie est une valeur booléenne indiquant si le modèle a été trouvé. |
Remarques
Select-String est semblable à la commande Grep dans UNIX et à la commande FindStr dans Windows.
Pour utiliser Select-String, tapez le texte à rechercher comme valeur du paramètre Pattern.
Pour spécifier le texte à rechercher, procédez comme suit :
-- Tapez le texte dans une chaîne entre guillemets, puis dirigez-la vers Select-String.
-- Stockez une chaîne de texte dans une variable, puis spécifiez la variable en tant que valeur du paramètre InputObject.
-- Si le texte est stocké dans des fichiers, utilisez le paramètre Path pour spécifier le chemin d'accès aux fichiers.
Par défaut, Select-String interprète la valeur du paramètre Pattern en tant qu'expression régulière. (Pour plus d'informations, consultez about_Regular_Expressions.) Cependant, vous pouvez utiliser le paramètre SimpleMatch pour écraser la correspondance d'expression régulière. Le paramètre SimpleMatch recherche les instances de la valeur du paramètre Pattern dans l'entrée.
La sortie par défaut de Select-String est un objet MatchInfo, qui inclut des informations détaillées sur les correspondances. Les informations figurant dans l'objet sont utiles lorsque vous recherchez du texte dans des fichiers, car les objets MatchInfo ont des propriétés telles que Filename et Line. Lorsque l'entrée ne provient pas du fichier, la valeur de ces paramètres est « InputStream ».
Si vous n'avez pas besoin des informations contenues dans l'objet MatchInfo, utilisez le paramètre Quiet, qui retourne une valeur booléenne (true ou false) pour indiquer s'il a trouvé une correspondance, au lieu d'un objet MatchInfo.
Lors de la correspondance d'expressions, Select-String utilise la culture actuelle définie pour le système. Pour rechercher la culture actuelle, utilisez l'applet de commande Get-Culture.
Pour rechercher les propriétés d'un objet MatchInfo, tapez ce qui suit :
select-string -path test.txt -pattern "test" | Get-Member | Format-List -property *
Exemple 1
C:\PS>"Hello","HELLO" | select-string -pattern "HELLO" -casesensitive
Description
-----------
Cette commande effectue une mise en correspondance respectant la casse du texte dirigé vers la commande Select-String.
En conséquence, Select-String recherche uniquement « HELLO », car « Hello » ne correspond pas.
Étant donné que chaque chaîne entre guillemets est traitée comme une ligne, sans le paramètre CaseSensitive, Select-String reconnaîtrait les deux chaînes comme des correspondances.
Exemple 2
C:\PS>select-string -path *.xml -pattern "the the"
Description
-----------
Cette commande effectue une recherche dans tous les fichiers portant l'extension .xml du répertoire actif et affiche les lignes de ces fichiers qui incluent la chaîne « the the ».
Exemple 3
C:\PS>select-string -path $pshome\en-US\*.txt -pattern "@"
Description
-----------
Cette commande recherche des d'informations sur l'utilisation de l'arobase (@) dans les fichiers d'aide conceptuelle de Windows PowerShell (about_*.txt).
Pour indiquer le chemin d'accès, cette commande utilise la valeur de la variable automatique $pshome, qui stocke le chemin d'accès au répertoire d'installation de Windows PowerShell. Dans cet exemple, la commande effectue une recherche dans le sous-répertoire en-US, qui contient les fichiers d'aide en langue anglaise (US) de Windows PowerShell.
Exemple 4
C:\PS>function search-help
{
$pshelp = "$pshome\es\about_*.txt", "$pshome\en-US\*dll-help.xml"
select-string -path $pshelp -pattern $args[0]
}
Description
-----------
Cette fonction simple utilise l'applet de commande Select-String pour rechercher une chaîne particulière dans les fichiers d'aide de Windows PowerShell. Dans cet exemple, la fonction recherche des fichiers de langue Anglais-États-Unis dans le sous-répertoire « en-US ».
Pour utiliser la fonction afin de rechercher une chaîne, telle que « psdrive », tapez « search-help psdrive ».
Pour utiliser cette fonction dans n'importe quelle console Windows PowerShell, modifiez le chemin d'accès afin de pointer vers les fichiers d'aide de Windows PowerShell sur votre système, puis collez la fonction dans votre profil Windows PowerShell.
Exemple 5
C:\PS>$events = get-eventlog -logname application -newest 100
C:\PS> $events | select-string -inputobject {$_.message} -pattern "failed"
Description
-----------
Cet exemple recherche la chaîne « failed » dans les 100 événements les plus récents du journal des applications de l'observateur d'événements.
La première commande utilise l'applet de commande Get-EventLog pour obtenir les 100 événements les plus récents du journal d'événements d'applications. Elle les enregistre ensuite dans la variable $events.
La deuxième commande utilise un opérateur de pipeline (|) pour envoyer les objets de la variable $events à l'applet de commande Select-String. Elle utilise le paramètre InputObject pour représenter l'entrée à partir de la variable $events. La valeur du paramètre InputObject est la propriété Message de chaque objet qui traverse le pipeline. L'objet actuel est représenté par le symbole $_.
Lorsqu'un événement arrive dans le pipeline, Select-String recherche la chaîne « failed » dans la valeur de sa propriété Message, puis affiche toutes les lignes incluant une correspondance.
Exemple 6
C:\PS>get-childitem c:\windows\system32\* -include *.txt -recurse |
select-string -pattern "Microsoft" -casesensitive
Description
-----------
Cette commande examine tous les fichiers des sous-répertoires de C:\Windows\System32 comportant l'extension .txt et recherche la chaîne « Microsoft ». Le paramètre CaseSensitive indique que le « M » de « Microsoft » doit être en majuscule et que les autres caractères doivent être en minuscules pour que Select-String trouve une correspondance.
Exemple 7
C:\PS>select-string -path process.txt -pattern idle, svchost -notmatch
Description
-----------
Cette commande recherche les lignes de texte du fichier Process.txt qui n'incluent pas les mots « idle » ou « svchost ».
Exemple 8
C:\PS>$f = select-string -path audit.log -pattern "logon failed" -context 2, 3
C:\PS> $f.count
C:\PS> ($f)[0].context | format-list
Description
-----------
La première commande recherche l'expression « logon failed » dans le fichier Audit.Log. Elle utilise le paramètre Context pour capturer 2 lignes avant la correspondance et 3 lignes après.
La deuxième commande utilise la propriété Count des tableaux d'objets pour afficher le nombre de correspondances trouvées (2 dans le cas présent).
La troisième commande affiche les lignes stockées dans la propriété Context du premier objet MatchInfo. Elle utilise la notation sous forme de tableau pour indiquer la première correspondance (correspondance 0 dans un tableau de base zéro) et utilise l'applet de commande Format-List pour afficher la valeur de la propriété Context sous forme de liste.
La sortie consiste en deux objets MatchInfo, un pour chaque correspondance détectée. Les lignes de contexte sont stockées dans la propriété Context de l'objet MatchInfo.
Exemple 9
C:\PS>$a = get-childitem $pshome\en-us\about*.help.txt | select-string -pattern transcript
C:\PS> $b = get-childitem $pshome\en-us\about*.help.txt | select-string -pattern transcript -allmatches
C:\PS> $a
C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39: Start-Transcript and Stop-Transcript.
C:\PS> $b
C:\Windows\system32\WindowsPowerShell\v1.0\en-us\about_Pssnapins.help.txt:39: Start-Transcript and Stop-Transcript.
C:\PS>> $a.matches
Groups : {Transcript}
Success : True
Captures : {Transcript}
Index : 13
Length : 10
Value : Transcript
C:\PS> $b.matches
Groups : {Transcript}
Success : True
Captures : {Transcript}
Index : 13
Length : 10
Value : Transcript
Groups : {Transcript}
Success : True
Captures : {Transcript}
Index : 33
Length : 10
Value : Transcript
Description
-----------
Cet exemple illustre l'effet du paramètre AllMatches de Select-String. AllMatches recherche toutes les correspondances de modèles d'une ligne, au lieu de rechercher uniquement la première correspondance de chaque ligne.
La première commande de l'exemple recherche des instances du mot « transcript » dans les fichiers d'aide conceptuelle de Windows PowerShell (aide « à propos de »). La deuxième commande est identique, sauf qu'elle utilise le paramètre AllMatches.
La sortie de la première commande est enregistrée dans la variable $a. La sortie de la deuxième commande est enregistrée dans la variable $b.
Lorsque vous affichez la valeur des variables, l'affichage par défaut est identique, comme indiqué dans la sortie d'exemple.
Cependant, la cinquième et la sixième commandes affichent la valeur de la propriété Matches de chaque objet. La propriété Matches de la première commande contient une seule correspondance (autrement dit, un objet System.Text.RegularExpressions.Match), alors que la propriété Matches de la deuxième commande contient des objets pour les deux correspondances de la ligne.