Sucht Text in Zeichenfolgen und Dateien.
Syntax
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>]
Beschreibung
Mit dem Cmdlet "Select-String" werden Text und Textmuster in Eingabezeichenfolgen und -dateien gesucht. Sie können es wie Grep in UNIX und Findstr in Windows verwenden.
Select-String basiert auf Textzeilen. Standardmäßig sucht Select-String die erste Übereinstimmung in jeder Zeile und zeigt für jede Übereinstimmung den Dateinamen, die Zeilennummer und den gesamten Text in der Zeile an, die die Übereinstimmung enthält.
Sie können jedoch festlegen, dass das Cmdlet mehrere Übereinstimmungen pro Zeile sucht, Text vor und nach der Übereinstimmung anzeigt oder nur einen booleschen Wert (True oder False) anzeigt, der angibt, ob eine Übereinstimmung gefunden wurde.
Select-String verwendet für Vergleiche reguläre Ausdrücke, kann jedoch auch einen einfachen Vergleich ausführen, bei dem die Eingabe nach dem angegebenen Text durchsucht wird.
Mit Select-String können alle Textübereinstimmungen oder nur die erste Übereinstimmung in jeder Eingabedatei angezeigt werden. Das Cmdlet kann auch jeden Text anzeigen, der nicht mit dem angegebenen Muster übereinstimmt.
Sie können außerdem angeben, dass Select-String eine bestimmte Zeichencodierung erwartet, z. B. beim Durchsuchen von Dateien mit Unicode-Text.
Parameter
-AllMatches
Sucht mehrere Übereinstimmungen in jeder Textzeile. Ohne diesen Parameter sucht Select-String nur die erste Übereinstimmung in jeder Textzeile.
Wenn mit Select-String mehrere Übereinstimmungen in einer Textzeile gefunden werden, wird dennoch nur ein MatchInfo-Objekt für die Zeile ausgegeben, jedoch enthält die Matches-Eigenschaft des Objekts alle Übereinstimmungen.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-CaseSensitive
Legt fest, dass bei Vergleichen die Groß-/Kleinschreibung berücksichtigt wird. Standardmäßig wird bei Vergleichen die Groß-/Kleinschreibung nicht berücksichtigt.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Context <Int32[]>
Erfasst die angegebene Anzahl von Zeilen vor und nach der Zeile mit der Übereinstimmung. Dies ermöglicht es Ihnen, die Übereinstimmung im Kontext anzuzeigen.
Wenn Sie eine Zahl als Wert dieses Parameters eingeben, bestimmt diese Zahl die Anzahl der vor und nach der Übereinstimmung erfassten Zeilen. Wenn Sie zwei Zahlen als Wert eingeben, bestimmt die erste Zahl die Anzahl der Zeilen vor der Übereinstimmung und die zweite Zahl die Anzahl der Zeilen nach der Übereinstimmung.
In der Standardanzeige werden Zeilen mit einer Übereinstimmung durch ein Größer-als-Zeichen (ASCII 62) in der ersten Spalte der Anzeige angegeben. Bei Zeilen ohne Markierung handelt es sich um den Kontext.
Mit diesem Parameter wird die Anzahl der von Select-String generierten Objekte nicht geändert. Select-String generiert für jede Übereinstimmung ein MatchInfo-Objekt (Microsoft.PowerShell.Commands.MatchInfo). Der Kontext wird als Zeichenfolgenarray in der Context-Eigenschaft des Objekts gespeichert.
Wenn Sie die Ausgabe des Befehls "Select-String" über die Pipeline an einen weiteren Select-String-Befehl übergeben, durchsucht der empfangende Befehl nur den Text in der zu vergleichenden Zeile (der Wert der Line-Eigenschaft des MatchInfo-Objekts), nicht den Text in den Kontextzeilen. Daher ist der Context-Parameter im empfangenden Befehl "Select-String" nicht gültig.
Wenn der Kontext eine Übereinstimmung enthält, umfasst das MatchInfo-Objekt für jede Übereinstimmung alle Kontextzeilen, jedoch werden die überlappenden Zeilen nur einmal angezeigt.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Encoding <string>
Gibt die Zeichencodierung an, die Select-String beim Durchsuchen der Datei voraussetzen soll. Der Standardwert ist "UTF8".
Gültige Werte sind "UTF7", "UTF8", "UTF32", "ASCII", "Unicode" "BigEndianUnicode", "Default" und "OEM". "Default" ist die Codierung der aktuellen ANSI-Codepage des Systems. "OEM" ist die Codepage-ID für den aktuellen Originalcomputerhersteller (OEM) des Betriebssystems.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Exclude <string[]>
Schließt die angegebenen Elemente aus. Der Path-Parameter wird durch den Wert dieses Parameters qualifiziert. Geben Sie ein Pfadelement oder -muster wie "*.txt" ein. Platzhalter sind zulässig.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Include <string[]>
Schließt nur die angegebenen Elemente ein. Der Path-Parameter wird durch den Wert dieses Parameters qualifiziert. Geben Sie ein Pfadelement oder -muster wie "*.txt" ein. Platzhalter sind zulässig.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-InputObject <psobject>
Gibt den zu durchsuchenden Text an. Geben Sie eine Variable ein, die den Text enthält, oder geben Sie einen Befehl oder einen Ausdruck ein, mit dem der Text abgerufen wird.
Erforderlich? |
true |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByValue) |
Platzhalterzeichen akzeptieren? |
false |
-List
Gibt nur die erste Übereinstimmung in jeder Eingabedatei zurück. Standardmäßig gibt Select-String ein MatchInfo-Objekt für jede gefundene Übereinstimmung zurück.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-NotMatch
Sucht Text, der nicht mit dem angegebenen Muster übereinstimmt.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Path <string[]>
Gibt den Pfad der zu durchsuchenden Dateien an. Platzhalter sind zulässig. Der Standardspeicherort ist das lokale Verzeichnis.
Geben Sie Dateien im Verzeichnis an, z. B. "log1.txt", "*.doc" oder "*.*". Wenn Sie nur ein Verzeichnis angeben, schlägt der Befehl fehl.
Erforderlich? |
true |
Position? |
2 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
true (ByPropertyName) |
Platzhalterzeichen akzeptieren? |
false |
-Pattern <string[]>
Gibt den zu suchenden Text an. Geben Sie eine Zeichenfolge oder einen regulären Ausdruck ein. Wenn Sie eine Zeichenfolge eingeben, verwenden Sie den SimpleMatch-Parameter.
Weitere Informationen über reguläre Ausdrücke finden Sie unter "about_Regular_Expressions".
Erforderlich? |
true |
Position? |
1 |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-Quiet
Gibt statt eines MatchInfo-Objekts einen booleschen Wert (True oder False) zurück. Wenn das Muster gefunden wird, ist der Wert "True", andernfalls "False".
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
-SimpleMatch
Verwendet einen einfachen Vergleich statt eines Vergleichs mit regulärem Ausdruck. Bei einem einfachen Vergleich durchsucht Select-String die Eingabe nach dem Text im Pattern-Parameter. Der Wert des Pattern-Parameters wird nicht als Anweisung mit regulärem Ausdruck interpretiert.
Erforderlich? |
false |
Position? |
named |
Standardwert |
|
Pipelineeingaben akzeptieren? |
false |
Platzhalterzeichen akzeptieren? |
false |
<CommonParameters>
Dieses Cmdlet unterstützt die folgenden allgemeinen Parameter: -Verbose, -Debug, -ErrorAction, -ErrorVariable, -OutBuffer und -OutVariable. Weitere Informationen finden Sie unter about_Commonparameters.
Eingaben und Ausgaben
Der Eingabetyp ist der Typ der Objekte, die über die Pipeline an das Cmdlet übergeben werden können. Der Rückgabetyp ist der Typ der Objekte, die das Cmdlet zurückgibt.
Eingaben |
System.Management.Automation.PSObject Sie können über die Pipeline jedes Objekt übergeben, das über eine ToString-Methode für Select-String verfügt. |
Ausgaben |
Microsoft.PowerShell.Commands.MatchInfo oder System.Boolean Standardmäßig entspricht die Ausgabe einem Satz von MatchInfo-Objekten, eines pro gefundene Übereinstimmung. Wenn Sie den Quiet-Parameter verwenden, entspricht die Ausgabe einem booleschen Wert, der angibt, ob das Muster gefunden wurde. |
Hinweise
Select-String entspricht dem Befehl "Grep" in UNIX und dem Befehl "FindStr" in Windows.
Um Select-String zu verwenden, geben Sie den Suchtext als Wert des Pattern-Parameters ein.
So gehen Sie vor, um den Suchtext anzugeben:
– Geben Sie den Text in einer Zeichenfolge in Anführungszeichen ein, und übergeben Sie diese dann über die Pipeline an Select-String.
– Speichern Sie eine Textzeichenfolge in einer Variablen, und geben Sie die Variable dann als Wert des InputObject-Parameters an.
– Wenn der Text in Dateien gespeichert ist, geben Sie den Pfad der Dateien mithilfe des Path-Parameters an.
Standardmäßig interpretiert Select-String den Wert des Pattern-Parameters als regulären Ausdruck. (Weitere Informationen finden Sie unter "about_Regular_Expressions".) Sie können jedoch den SimpleMatch-Parameter verwenden, um das Vergleichen mithilfe von regulären Ausdrücken zu überschreiben. Mit dem SimpleMatch-Parameter werden Instanzen des Werts des Pattern-Parameters in der Eingabe gesucht.
Die Standardausgabe von Select-String ist ein MatchInfo-Objekt, das ausführliche Informationen über die Übereinstimmungen enthält. Die Informationen in dem Objekt sind bei der Suche nach Text in Dateien hilfreich, da MatchInfo-Objekte beispielsweise über die Eigenschaften "Filename" und "Line" verfügen. Wenn die Eingabe nicht aus der Datei stammt, ist der Wert dieser Parameter "InputStream".
Wenn Sie die Informationen im MatchInfo-Objekt nicht benötigen, verwenden Sie den Quiet-Parameter. Dieser gibt statt eines MatchInfo-Objekts einen booleschen Wert (True oder False) zurück, um anzugeben, ob eine Übereinstimmung gefunden wurde.
Beim Vergleich von Ausdrücken verwendet Select-String den aktuellen Ausdruck, der für das System festgelegt wurde. Um die aktuelle Kultur zu suchen, verwenden Sie das Cmdlet "Get-Culture".
Um die Eigenschaften eines MatchInfo-Objekts zu suchen, geben Sie Folgendes ein:
select-string -path test.txt -pattern "test" | Get-Member | Format-List -property *
Beispiel 1
C:\PS>"Hello","HELLO" | select-string -pattern "HELLO" -casesensitive Beschreibung ----------- Dieser Befehl vergleicht Text, der über die Pipeline an den Befehl "Select-String" übergeben wurde, unter Berücksichtigung der Groß-/Kleinschreibung. Daher findet Select-String nur "HELLO", da "Hello" nicht übereinstimmt. Da jede der Zeichenfolgen in Anführungszeichen als Zeile behandelt wird, interpretiert Select-String ohne den CaseSensitive-Parameter beide Zeichenfolgen als Übereinstimmung.
Beispiel 2
C:\PS>select-string -path *.xml -pattern "the the" Beschreibung ----------- Mit diesem Befehl werden alle Dateien mit der Dateinamenerweiterung ".xml" im aktuellen Verzeichnis durchsucht und die Zeilen in diesen Dateien angezeigt, die die Zeichenfolge "the the" enthalten.
Beispiel 3
C:\PS>select-string -path $pshome\en-US\*.txt -pattern "@" Beschreibung ----------- Mit diesem Befehl werden in den konzeptionellen Hilfedateien ("about_*.txt") für Windows PowerShell Informationen über die Verwendung das at-Zeichens (@) gesucht. Der Pfad wird in diesem Befehl mit dem Wert der automatischen Variablen "$pshome" angegeben, in der der Pfad des Windows PowerShell-Installationsverzeichnisses gespeichert wird. In diesem Beispiel durchsucht der Befehl das Unterverzeichnis "en-US", das die Hilfedateien für Windows PowerShell in englischer Sprache (Englisch, USA) enthält.
Beispiel 4
C:\PS>function search-help { $pshelp = "$pshome\es\about_*.txt", "$pshome\en-US\*dll-help.xml" select-string -path $pshelp -pattern $args[0] } Beschreibung ----------- Diese einfache Funktion sucht mit dem Cmdlet "Select-String" in den Windows PowerShell-Hilfedateien nach einer bestimmten Zeichenfolge. In diesem Beispiel sucht die Funktion im Unterverzeichnis "en-US" nach Dateien in englischer Sprache (Englisch, USA). Um mit der Funktion eine Zeichenfolge, z. B. "psdrive", zu suchen, geben Sie folgenden Befehl ein: "search-help psdrive". Um diese Funktion in einer beliebigen Windows PowerShell-Konsole zu verwenden, ändern Sie den Pfad in den Pfad der Windows PowerShell-Hilfedateien auf dem System, und fügen Sie dann die Funktion in das Windows PowerShell-Profil ein.
Beispiel 5
C:\PS>$events = get-eventlog -logname application -newest 100 C:\PS> $events | select-string -inputobject {$_.message} -pattern "failed" Beschreibung ----------- In diesem Beispiel wird in den 100 neuesten Ereignissen im Anwendungsprotokoll der Ereignisanzeige nach der Zeichenfolge "failed" gesucht. Im ersten Befehl wird das Cmdlet "Get-EventLog" verwendet, um die 100 letzten Ereignisse aus dem Anwendungsereignisprotokoll abzurufen. Dann werden die Ereignisse in der Variablen "$events" gespeichert. Im zweiten Befehl werden die Objekte in der Variablen "$events" mit einem Pipelineoperator (|) an Select-String gesendet. Die Eingabe aus der Variablen "$events" wird mithilfe des InputObject-Parameters dargestellt. Der Wert des InputObject-Parameters ist die Message-Eigenschaft jedes Objekts, das gerade über die Pipeline übertragen wird. Das aktuelle Objekt wird durch das Symbol "$_" dargestellt. Bei der Ankunft jedes Ereignisses in der Pipeline sucht Select-String im Wert der zugehörigen Message-Eigenschaft nach der Zeichenfolge "failed" und zeigt dann Zeilen an, die eine Übereinstimmung enthalten.
Beispiel 6
C:\PS>get-childitem c:\windows\system32\* -include *.txt -recurse | select-string -pattern "Microsoft" -casesensitive Beschreibung ----------- Mit diesem Befehl werden alle Dateien in den Unterverzeichnissen von "C:\Windows\System32" mit der Dateinamenerweiterung ".txt" überprüft und nach der Zeichenfolge "Microsoft" durchsucht. Der CaseSensitive-Parameter gibt an, dass das "M" in "Microsoft" ein Großbuchstabe sein muss und die restlichen Zeichen Kleinbuchstaben sein müssen, damit Select-String eine Übereinstimmung findet.
Beispiel 7
C:\PS>select-string -path process.txt -pattern idle, svchost -notmatch Beschreibung ----------- Mit diesem Befehl werden Textzeilen in der Datei "Process.txt" gesucht, die weder das Wort "idle" noch das Wort "svchost" enthalten.
Beispiel 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 Beschreibung ----------- Im ersten Befehl wird in der Datei "audit.log" der Ausdruck "logon failed" gesucht. Mit dem Context-Parameter werden 2 Zeilen vor und 3 Zeilen nach der Übereinstimmung erfasst. Im zweiten Befehl wird die Anzahl der gefundenen Übereinstimmungen mithilfe der Count-Eigenschaft von Objektarrays angezeigt. In diesem Fall wurden 2 Übereinstimmungen gefunden. Im dritten Befehl werden die in der Context-Eigenschaft des ersten MatchInfo-Objekts gespeicherten Zeilen angezeigt. Die erste Übereinstimmung (Übereinstimmung 0 in einem nullbasierten Array) wird mithilfe der Arraynotation angegeben, und mit dem Cmdlet "Format-List" wird der Wert der Context-Eigenschaft als Liste angezeigt. Die Ausgabe besteht aus zwei MatchInfo-Objekten (eines pro gefundene Übereinstimmung). Die Kontextzeilen werden in der Context-Eigenschaft des MatchInfo-Objekts gespeichert.
Beispiel 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 Beschreibung ----------- In diesem Beispiel werden die Auswirkungen des AllMatches-Parameters von Select-String veranschaulicht. Mit AllMatches werden alle Musterübereinstimmungen in einer Zeile und nicht nur die erste Übereinstimmung in jeder Zeile gesucht. Im ersten Befehl des Beispiels werden die konzeptionellen Hilfedateien ("about"-Hilfe) für Windows PowerShell nach Instanzen des Worts "transcript" durchsucht. Der zweite Befehl unterscheidet sich nur darin, dass er den AllMatches-Parameter verwendet. Die Ausgabe des ersten Befehls wird in der Variablen "$a" gespeichert. Die Ausgabe des zweiten Befehls wird in der Variablen "$b" gespeichert. Wenn Sie den Wert der Variablen anzeigen, ist die Standardanzeige identisch, wie in der Beispielausgabe gezeigt. Im fünften und sechsten Befehl wird jedoch der Wert der Matches-Eigenschaft jedes Objekts angezeigt. Die Matches-Eigenschaft des ersten Befehls enthält nur eine Übereinstimmung (d. h. ein System.Text.RegularExpressions.Match-Objekt), wohingegen die Matches-Eigenschaft des zweiten Befehls Objekte für beide Übereinstimmungen in der Zeile enthält.
Siehe auch