Select-String
Vyhledá text v řetězcích a souborech.
Syntax
Select-String
[-Pattern] <string[]>
[-Path] <string[]>
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-Include <string[]>]
[-Exclude <string[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <string>]
[-Context <Int32[]>]
[<CommonParameters>]
Select-String
[-Pattern] <string[]>
-InputObject <psobject>
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-Include <string[]>]
[-Exclude <string[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <string>]
[-Context <Int32[]>]
[<CommonParameters>]
Select-String
[-Pattern] <string[]>
-LiteralPath <string[]>
[-SimpleMatch]
[-CaseSensitive]
[-Quiet]
[-List]
[-Include <string[]>]
[-Exclude <string[]>]
[-NotMatch]
[-AllMatches]
[-Encoding <string>]
[-Context <Int32[]>]
[<CommonParameters>]
Description
Rutina Select-String
vyhledá textové vzory ve vstupních řetězcích a souborech. Můžete použít Select-String
podobně jako grep v SYSTÉMU UNIX nebo findstr.exe ve Windows.
Select-String
je založená na řádcích textu. Ve výchozím nastavení Select-String
najde první shodu na každém řádku a pro každou shodu zobrazí název souboru, číslo řádku a veškerý text na řádku, který shodu obsahuje. Můžete nasměrovat Select-String
na vyhledání více shod na řádek, zobrazit text před a po shodě nebo zobrazit logickou hodnotu (Pravda nebo Nepravda), která označuje, jestli byla nalezena shoda.
Select-String
používá porovnávání regulárních výrazů, ale může také provést shodu, která vyhledá vstup pro zadaný text.
Select-String
může zobrazit všechny shody textu nebo zastavit po první shodě v každém vstupním souboru.
Select-String
se dá použít k zobrazení veškerého textu, který neodpovídá zadanému vzoru.
Můžete také určit, že Select-String
se má očekávat konkrétní kódování znaků, například při hledání souborů textu Unicode. Select-String
používá značku pořadí bajtů (BOM) ke zjištění formátu kódování souboru. Pokud soubor neobsahuje žádný bom, předpokládá se, že kódování je UTF8.
Příklady
Příklad 1: Vyhledání shody s rozlišováním velkých a malých písmen
V tomto příkladu se rozlišují velká a malá písmena u textu odeslaného do kanálu do rutiny Select-String
.
'Hello', 'HELLO' | Select-String -Pattern 'HELLO' -CaseSensitive -SimpleMatch
Textové řetězce Hello a HELLO se odesílají do kanálu rutiny Select-String
.
Select-String
používá parametr Pattern k zadání funkce HELLO. Parametr CaseSensitive určuje, že velká a malá písmena musí odpovídat pouze vzoru velkých písmen. SimpleMatch je volitelný parametr a určuje, že řetězec ve vzoru není interpretován jako regulární výraz.
Select-String
v konzole PowerShellu zobrazí HELLO .
Příklad 2: Vyhledání shod v textových souborech
Tento příkaz prohledá všechny soubory s příponou .txt
názvu souboru v aktuálním adresáři. Výstup zobrazí řádky v těchto souborech, které obsahují zadaný řetězec.
Get-Alias | Out-File -FilePath .\Alias.txt
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\*.txt -Pattern 'Get'
Alias.txt:8:Alias cat -> Get-Content
Alias.txt:28:Alias dir -> Get-ChildItem
Alias.txt:43:Alias gal -> Get-Alias
Command.txt:966:Cmdlet Get-Acl
Command.txt:967:Cmdlet Get-Alias
V tomto příkladu Get-Alias
se a Get-Command
používají spolu s rutinou Out-File
k vytvoření dvou textových souborů v aktuálním adresáři, Alias.txt a Command.txt.
Select-String
pomocí parametru Path se zástupným znakem hvězdička (*
) prohledá všechny soubory v aktuálním adresáři s příponou .txt
názvu souboru . Parametr Pattern určuje text, který se má shodovat s get-. Select-String
zobrazí výstup v konzole PowerShellu. Název souboru a číslo řádku předchází každému řádku obsahu, který obsahuje shodu pro parametr Pattern .
Příklad 3: Vyhledání shody se vzorem
V tomto příkladu se prohledá více souborů, aby se našly shody pro zadaný vzor. Vzor používá kvantifikátor regulárních výrazů. Další informace najdete v tématu about_Regular_Expressions.
Select-String -Path "$PSHOME\en-US\*.txt" -Pattern '\?'
C:\Program Files\PowerShell\6\en-US\default.help.txt:27: beginning at https://go.microsoft.com/fwlink/?LinkID=108518.
C:\Program Files\PowerShell\6\en-US\default.help.txt:50: or go to: https://go.microsoft.com/fwlink/?LinkID=210614
Rutina Select-String
používá dva parametry: Path (Cesta) a Pattern (Vzor). Parametr Path používá proměnnou $PSHOME
, která určuje adresář PowerShellu. Zbytek cesty zahrnuje podadresář en-US a určuje každý *.txt
soubor v adresáři. Parametr Pattern určuje shodu s otazníkem (?
) v každém souboru. Zpětné lomítko (\
) se používá jako řídicí znak a je nezbytné, protože otazník (?
) je kvantifikátor regulárního výrazu. Select-String
zobrazí výstup v konzole PowerShellu. Název souboru a číslo řádku předchází každému řádku obsahu, který obsahuje shodu pro parametr Pattern .
Příklad 4: Použití Select-String ve funkci
Tento příklad vytvoří funkci pro vyhledání vzoru v souborech nápovědy PowerShellu. V tomto příkladu funkce existuje pouze v relaci PowerShellu. Po zavření relace PowerShellu se funkce odstraní. Další informace najdete v tématu about_Functions.
PS> Function Search-Help
>> {
>> $PSHelp = "$PSHOME\en-US\*.txt"
>> Select-String -Path $PSHelp -Pattern 'About_'
>> }
PS>
PS> Search-Help
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:2: about_ActivityCommonParameters
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:31: see about_WorkflowCommonParameters.
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:33: about_CommonParameters.
Funkce se vytvoří na příkazovém řádku PowerShellu. Příkaz Function
použije název Search-Help. Stisknutím klávesy Enter začněte do funkce přidávat příkazy. Z příkazového >>
řádku přidejte jednotlivé příkazy a stiskněte Enter , jak je znázorněno v příkladu. Po přidání závěrečné hranaté závorky se vrátíte na příkazový řádek PowerShellu.
Funkce obsahuje dva příkazy. Proměnná $PSHelp
ukládá cestu k souborům nápovědy PowerShellu. $PSHOME
je instalační adresář PowerShellu s podadresářem en-US , který určuje jednotlivé *.txt
soubory v adresáři.
Příkaz Select-String
ve funkci používá parametry Path a Pattern . Parametr Path používá proměnnou $PSHelp
k získání cesty. Parametr Pattern používá jako kritéria hledání řetězcový About_ .
Funkci spustíte zadáním Search-Help
příkazu . Příkaz funkce Select-String
zobrazí výstup v konzole PowerShellu.
Příklad 5: Search pro řetězec v protokolu událostí Windows
Tento příklad vyhledá řetězec v protokolu událostí systému Windows. Proměnná $_
představuje aktuální objekt v kanálu. Další informace najdete v tématu about_Automatic_Variables.
$Events = Get-WinEvent -LogName Application -MaxEvents 50
$Events | Select-String -InputObject {$_.message} -Pattern 'Failed'
Rutina Get-WinEvent
používá parametr LogName k určení protokolu aplikace. Parametr MaxEvents získá z protokolu 50 nejnovějších událostí. Obsah protokolu je uložený v proměnné s názvem $Events
.
Proměnná $Events
se odešle do kanálu do rutiny Select-String
. Select-String
používá parametr InputObject . Proměnná $_
představuje aktuální objekt a message
je vlastností události. Parametr Pattern zadá řetězec Failed a vyhledá shody v $_.message
. Select-String
zobrazí výstup v konzole PowerShellu.
Příklad 6: Vyhledání řetězce v podadresářích
Tento příklad hledá konkrétní textový řetězec v adresáři a ve všech jeho podadresářích.
Get-ChildItem -Path C:\Windows\System32\*.txt -Recurse | Select-String -Pattern 'Microsoft' -CaseSensitive
Get-ChildItem
používá parametr Path k zadání C:\Windows\System32*.txt. Parametr Recurse zahrnuje podadresáře. Objekty se odesílají kanálem do Select-String
.
Select-String
používá parametr Pattern a určuje řetězec Microsoft. Parametr CaseSensitive se používá ke shodě s přesnou velikostí písmen řetězce. Select-String
zobrazí výstup v konzole PowerShellu.
Poznámka
V závislosti na vašich oprávněních se ve výstupu můžou zobrazit zprávy o odepření přístupu .
Příklad 7: Vyhledání řetězců, které neodpovídají vzoru
Tento příklad ukazuje, jak vyloučit řádky dat, které neodpovídají vzoru.
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get', 'Set' -NotMatch
Rutina Get-Command
odešle objekty v kanálu do Out-File
, aby se vytvořil souborCommand.txt v aktuálním adresáři. Select-String
používá parametr Path k určení souboruCommand.txt . Parametr Pattern určuje jako vyhledávací vzor Get a Set . Parametr NotMatch vyloučí z výsledků metody Get a Set .
Select-String
zobrazí výstup v konzole PowerShellu, který neobsahuje get nebo set.
Příklad 8: Vyhledání řádků před a za shodou
Tento příklad ukazuje, jak získat čáry před a za spárovaným vzorem.
Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get-Computer' -Context 2, 3
Command.txt:1186:Cmdlet Get-CmsMessage 3.0.0.0 Microsoft.PowerShell.Security
Command.txt:1187:Cmdlet Get-Command 3.0.0.0 Microsoft.PowerShell.Core
> Command.txt:1188:Cmdlet Get-ComputerInfo 3.1.0.0 Microsoft.PowerShell.Management
> Command.txt:1189:Cmdlet Get-ComputerRestorePoint 3.1.0.0 Microsoft.PowerShell.Management
Command.txt:1190:Cmdlet Get-Content 3.1.0.0 Microsoft.PowerShell.Management
Command.txt:1191:Cmdlet Get-ControlPanelItem 3.1.0.0 Microsoft.PowerShell.Management
Command.txt:1192:Cmdlet Get-Counter 3.0.0.0 Microsoft.PowerShell.Diagnostics
Rutina Get-Command
odešle objekty v kanálu do Out-File
, aby se vytvořil souborCommand.txt v aktuálním adresáři. Select-String
používá parametr Path k určení souboruCommand.txt . Parametr Pattern určuje jako vyhledávací vzor Get-Computer . Parametr Context používá dvě hodnoty, před a za, a označí shodu se vzorem ve výstupu pomocí úhlové závorky (>
). Výstupem parametru Context jsou dva řádky před první shodou vzorku a tři řádky za poslední shodou vzorku.
Příklad 9: Vyhledání všech shod vzorů
Tento příklad ukazuje, jak parametr AllMatches najde každý vzor shody v řádku textu. Ve výchozím nastavení Select-String
vyhledá pouze první výskyt vzorku v řádku textu. Tento příklad používá vlastnosti objektu, které jsou nalezeny pomocí rutiny Get-Member
.
PS> $A = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell'
PS> $A
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:5: Describes the parameters that Windows PowerShell
C:\Windows\System32\WindowsPowerShell\v1.0\en-US\about_ActivityCommonParameters.help.txt:9: Windows PowerShell Workflow adds the activity common
PS> $A.Matches
Groups : {0}
Success : True
Name : 0
Captures : {0}
Index : 4
Length : 10
Value : PowerShell
PS> $A.Matches.Length
2073
PS> $B = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell' -AllMatches
PS> $B.Matches.Length
2200
Rutina Get-ChildItem
používá parametr Path . Parametr Path používá proměnnou $PSHOME
, která určuje adresář PowerShellu. Zbytek cesty zahrnuje podadresář en-US a určuje každý *.txt
soubor v adresáři. Objekty Get-ChildItem
jsou uloženy v $A
proměnné . Proměnná $A
se odešle do kanálu do rutiny Select-String
. Select-String
pomocí parametru Pattern vyhledá v každém souboru řetězec PowerShellu.
Na příkazovém řádku PowerShellu $A
se zobrazí obsah proměnné. Existuje řádek, který obsahuje dva výskyty řetězce PowerShellu.
Vlastnost $A.Matches
uvádí první výskyt vzorového PowerShellu na každém řádku.
Vlastnost $A.Matches.Length
spočítá první výskyt vzoru PowerShellu na každém řádku.
Proměnná $B
používá stejné Get-ChildItem
rutiny a Select-String
, ale přidává parametr AllMatches . AllMatches najde každý výskyt vzorového PowerShellu na každém řádku. Objekty uložené v proměnných $A
a $B
jsou identické.
Vlastnost se $B.Matches.Length
zvyšuje, protože pro každý řádek se počítá každý výskyt vzorového PowerShellu .
Parametry
-AllMatches
Označuje, že rutina vyhledá více než jednu shodu v každém řádku textu. Bez tohoto parametru Select-String
najde v každém řádku textu pouze první shodu.
Když Select-String
najde více než jednu shodu v řádku textu, stále vygeneruje pouze jeden matchInfo objekt pro řádek, ale Matches vlastnost objektu obsahuje všechny shody.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-CaseSensitive
Označuje, že se v shodách rutin rozlišují velká a malá písmena. Ve výchozím nastavení se u shod nerozlišují velká a malá písmena.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Context
Zachytí zadaný počet řádků před a za čárou, která odpovídá vzoru.
Pokud jako hodnotu tohoto parametru zadáte jedno číslo, určí toto číslo počet řádků zachycených před a po shodě. Pokud jako hodnotu zadáte dvě čísla, první číslo určuje počet řádků před shodou a druhé číslo určuje počet řádků po shodě. Například, -Context 2,3
.
Ve výchozím zobrazení jsou čáry se shodou označeny pravou závorkou () (>
ASCII 62) v prvním sloupci zobrazení. Neoznačené řádky jsou kontextem.
Parametr Context nemění počet objektů vygenerovaných nástrojem Select-String
.
Select-String
vygeneruje jeden matchInfo objekt pro každou shodu. Kontext je uložen jako pole řetězců ve vlastnosti Context objektu.
Když je výstup Select-String
příkazu odeslán z kanálu do jiného Select-String
příkazu, přijímající příkaz prohledá pouze text na odpovídajícím řádku. Shodný řádek je hodnota line vlastnost MatchInfo objektu, nikoli text v kontextových řádcích. V důsledku toho není parametr Context pro přijímající Select-String
příkaz platný.
Pokud kontext obsahuje shodu, matchInfo objekt pro každou shodu obsahuje všechny kontextové čáry, ale překrývající se čáry se zobrazí pouze jednou v zobrazení.
Type: | Int32[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Encoding
Určuje typ kódování cílového souboru. Výchozí hodnota je Výchozí.
Přijatelné hodnoty pro tento parametr jsou následující:
- ASCII Používá znakovou sadu ASCII (7bitová).
- BigEndianUnicode Používá UTF-16 s pořadím bajtů big-endian.
- Výchozí Používá kódování, které odpovídá aktivní znakové stránce systému (obvykle ANSI).
- OEM Použije kódování, které odpovídá aktuální znakové stránce výrobce OEM systému.
- Unicode Používá UTF-16 s pořadím bajtů little-endian.
- UTF7 Používá UTF-7.
- UTF8 Používá UTF-8.
- UTF32 Používá UTF-32 s pořadím bajtů little-endian.
Type: | String |
Accepted values: | ASCII, BigEndianUnicode, Default, OEM, Unicode, UTF7, UTF8, UTF32 |
Position: | Named |
Default value: | Default |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Exclude
Vyloučí zadané položky. Hodnota tohoto parametru kvalifikuje parametr Path . Zadejte element nebo vzor cesty, například *.txt
. Jsou povoleny zástupné y.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Include
Zahrnuje zadané položky. Hodnota tohoto parametru kvalifikuje parametr Path . Zadejte element nebo vzor cesty, například *.txt
. Jsou povoleny zástupné y.
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-InputObject
Určuje text, který se má prohledávat. Zadejte proměnnou, která obsahuje text, nebo zadejte příkaz nebo výraz, který získá text.
Použití parametru InputObject není totéž jako odesílání řetězců v kanálu do Select-String
.
Když do Select-String
rutiny předáte více než jeden řetězec, vyhledá zadaný text v každém řetězci a vrátí každý řetězec, který obsahuje hledaný text.
Když použijete parametr InputObject k odeslání kolekce řetězců, Select-String
považuje kolekci za jeden kombinovaný řetězec. Select-String
vrátí řetězce jako jednotku, pokud najde hledaný text v libovolném řetězci.
Type: | PSObject |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-List
Z každého vstupního souboru se vrátí pouze první výskyt odpovídajícího textu. Toto je nejúčinnější způsob, jak načíst soubory seznamu, které mají obsah odpovídající regulárnímu výrazu.
Ve výchozím nastavení Select-String
vrátí matchInfo objekt pro každou nalezenou shodu.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-LiteralPath
Určuje cestu k souborům, které mají být prohledány. Hodnota parametru LiteralPath se používá přesně tak, jak je zadána. Žádné znaky nejsou interpretovány jako zástupné znaky. Pokud cesta obsahuje řídicí znaky, uzavřete ji do jednoduchých uvozovek. Jednoduché uvozovky říkají PowerShellu, že nemá interpretovat žádné znaky jako řídicí sekvence. Další informace najdete v tématu about_Quoting_Rules.
Type: | String[] |
Aliases: | PSPath |
Position: | Named |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NotMatch
Parametr NotMatch najde text, který neodpovídá zadanému vzoru.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Path
Určuje cestu k souborům, které se mají prohledávat. Jsou povoleny zástupné y. Výchozím umístěním je místní adresář.
Zadejte soubory v adresáři, například log1.txt
, *.doc
nebo *.*
. Pokud zadáte pouze adresář, příkaz selže.
Type: | String[] |
Position: | 1 |
Default value: | Local directory |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-Pattern
Určuje text, který se má najít na každém řádku. Zadejte řetězec nebo regulární výraz. Pokud zadáte řetězec, použijte parametr SimpleMatch .
Informace o regulárních výrazech najdete v tématu about_Regular_Expressions.
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Quiet
Označuje, že rutina vrátí logickou hodnotu (True nebo False) místo matchInfo objektu. Hodnota je True, pokud je nalezen vzor; v opačném případě je hodnota False.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-SimpleMatch
Označuje, že rutina používá místo shody regulárního výrazu jednoduchou shodu. V jednoduché shodě Select-String
vyhledá vstup pro text v parametru Pattern . Neinterpretuje hodnotu parametru Pattern jako příkaz regulárního výrazu.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Vstupy
Libovolný objekt, který má metodu ToString , můžete nasměrovat na Select-String
.
Výstupy
Microsoft.PowerShell.Commands.MatchInfo or System.Boolean
Ve výchozím nastavení je výstupem sada objektů MatchInfo s jedním pro každou nalezenou shodu. Pokud použijete parametr Quiet , výstupem je logická hodnota označující, jestli byl nalezen vzor.
Poznámky
Select-String
se podobá grep v systému UNIX nebo findstr.exe ve Windows.
Alias SLS pro rutinu Select-String
byl zaveden v PowerShellu 3.0.
Poznámka
Podle schválených sloves pro příkazy PowerShellu je sc
oficiální předpona aliasu pro Select-*
rutiny , ne sl
. Proto by správný alias pro Select-String
měl být scs
, ne sls
. Toto je výjimka z tohoto pravidla.
Pokud chcete použít Select-String
, zadejte text, který chcete najít jako hodnotu parametru Pattern . Pokud chcete zadat text, který se má prohledávat, použijte následující kritéria:
- Zadejte text do řetězce s uvozovými znaky a pak ho předejte na
Select-String
. - Uložte textový řetězec do proměnné a potom zadejte proměnnou jako hodnotu parametru InputObject .
- Pokud je text uložený v souborech, zadejte cestu k souborům pomocí parametru Path .
Ve výchozím nastavení Select-String
interpretuje hodnotu parametru Pattern jako regulární výraz. (Další informace najdete v tématu about_Regular_Expressions.
Pomocí parametru SimpleMatch můžete přepsat shodu regulárních výrazů. Parametr SimpleMatch najde instance hodnoty parametru Pattern ve vstupu.
Výchozím výstupem Select-String
je objekt MatchInfo , který obsahuje podrobné informace o shodách. Informace v objektu jsou užitečné při hledání textu v souborech, protože objekty MatchInfo mají vlastnosti, jako je název souboru a řádek. Pokud vstup není ze souboru, hodnota těchto parametrů je InputStream.
Pokud nepotřebujete informace v objektu MatchInfo , použijte parametr Quiet . Parametr Quiet vrátí logickou hodnotu (Pravda nebo Nepravda), která označuje, zda se našla shoda, místo objektu MatchInfo .
Při porovnávání frází Select-String
použije aktuální jazykovou verzi nastavenou pro systém. K vyhledání aktuální jazykové verze použijte rutinu Get-Culture.
Pokud chcete najít vlastnosti objektu MatchInfo , zadejte následující příkaz:
Select-String -Path test.txt -Pattern 'test' | Get-Member | Format-List -Property *