Select-String

在字符串和文件中查找文本。

语法

Select-String
      [-Culture <String>]
      [-Pattern] <String[]>
      [-Path] <String[]>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-NoEmphasis]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <Encoding>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      [-Culture <String>]
      -InputObject <PSObject>
      [-Pattern] <String[]>
      -Raw
      [-SimpleMatch]
      [-CaseSensitive]
      [-List]
      [-NoEmphasis]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <Encoding>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      [-Culture <String>]
      -InputObject <PSObject>
      [-Pattern] <String[]>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-NoEmphasis]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <Encoding>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      [-Culture <String>]
      [-Pattern] <String[]>
      [-Path] <String[]>
      -Raw
      [-SimpleMatch]
      [-CaseSensitive]
      [-List]
      [-NoEmphasis]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <Encoding>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      [-Culture <String>]
      [-Pattern] <String[]>
      -LiteralPath <String[]>
      -Raw
      [-SimpleMatch]
      [-CaseSensitive]
      [-List]
      [-NoEmphasis]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <Encoding>]
      [-Context <Int32[]>]
      [<CommonParameters>]
Select-String
      [-Culture <String>]
      [-Pattern] <String[]>
      -LiteralPath <String[]>
      [-SimpleMatch]
      [-CaseSensitive]
      [-Quiet]
      [-List]
      [-NoEmphasis]
      [-Include <String[]>]
      [-Exclude <String[]>]
      [-NotMatch]
      [-AllMatches]
      [-Encoding <Encoding>]
      [-Context <Int32[]>]
      [<CommonParameters>]

说明

cmdlet Select-String 使用正则表达式匹配在输入字符串和文件中搜索文本模式。 可以在 Select-String UNIX 或 findstr.exe Windows 中使用类似的 grep

Select-String 基于文本行。 默认情况下, Select-String 查找每行中的第一个匹配项,并为每个匹配项显示文件名、行号以及包含匹配项的行中的所有文本。 可以直接 Select-String 查找每行的多个匹配项、在匹配前后显示文本,或者 (True 或 False) 显示布尔值,以指示是否找到匹配项。

Select-String 可以显示所有文本匹配项,也可以在每个输入文件中的第一个匹配项之后停止。 Select-String 可用于显示与指定模式不匹配的所有文本。

还可以指定应 Select-String 使用特定字符编码,例如在搜索 Unicode 文本文件时。 Select-String 使用字节顺序标记 (BOM) 来检测文件的编码格式。 如果文件没有 BOM,则假定编码为 UTF8。

示例

示例 1:查找区分大小写的匹配项

此示例对从管道向下发送到 cmdlet 的文本执行区分大小写的 Select-String 匹配。

'Hello', 'HELLO' | Select-String -Pattern 'HELLO' -CaseSensitive -SimpleMatch

HelloHELLO 的文本字符串在管道Select-String中向下发送到 cmdlet。 Select-String 使用 Pattern 参数指定 HELLOCaseSensitive 参数指定大小写必须仅匹配大写模式。 SimpleMatch 是一个可选参数,指定模式中的字符串不解释为正则表达式。 Select-String 在 PowerShell 控制台中显示 HELLO

示例 2:在文本文件中查找匹配项

此命令在当前目录中搜索文件扩展名为 .txt 的所有文件。 输出显示包含指定字符串的文件中的行。

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

在此示例中, Get-AliasGet-Command 与 cmdlet 一起使用 Out-File ,在当前目录中创建两个文本文件, Alias.txtCommand.txt

Select-String 使用带星号的 Path 参数 (*) 通配符搜索当前目录中文件扩展名 .txt为 的所有文件。 Pattern 参数指定要与 Get-匹配的文本。 Select-String 在 PowerShell 控制台中显示输出。 文件名和行号位于包含 Pattern 参数匹配项的每个内容行之前。

示例 3:查找模式匹配项

在此示例中,搜索多个文件以查找指定模式的匹配项。 模式使用正则表达式限定符。 有关详细信息,请参阅 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

cmdlet Select-String 使用两个参数: PathPatternPath 参数使用指定 PowerShell 目录的变量$PSHOME。 路径的其余部分包括子目录 en-US ,并指定目录中的每个 *.txt 文件。 Pattern 参数指定匹配每个文件中的问号 (?) 。 反斜杠 (\) 用作转义字符,并且是必需的,因为) (? 问号是正则表达式限定符。 Select-String 在 PowerShell 控制台中显示输出。 文件名和行号位于包含 Pattern 参数匹配项的每个内容行之前。

示例 4:在函数中使用 Select-String

此示例创建一个函数,用于在 PowerShell 帮助文件中搜索模式。 对于此示例,函数仅存在于 PowerShell 会话中。 关闭 PowerShell 会话时,将删除函数。 有关详细信息,请参阅 about_Functions

function Search-Help
{
    $PSHelp = "$PSHOME\en-US\*.txt"
    Select-String -Path $PSHelp -Pattern 'About_'
}

Search-Help

C:\Program Files\PowerShell\7\en-US\default.help.txt:67:    The titles of conceptual topics begin with "About_".
C:\Program Files\PowerShell\7\en-US\default.help.txt:70:    Get-Help About_<topic-name>
C:\Program Files\PowerShell\7\en-US\default.help.txt:93:    Get-Help About_Modules : Displays help about PowerShell modules.
C:\Program Files\PowerShell\7\en-US\default.help.txt:97:    about_Updatable_Help

函数在 PowerShell 命令行上创建。 命令 Function 使用名称 Search-Help。 按 Enter 开始向函数添加语句。 在提示符下 >> ,添加每个语句并按 Enter, 如示例中所示。 添加右括号后,将返回到 PowerShell 提示符。

函数包含两个命令。 变量 $PSHelp 存储 PowerShell 帮助文件的路径。 $PSHOME 是 PowerShell 安装目录,其子目录 en-US 指定目录中的每个 *.txt 文件。

Select-String函数中的 命令使用 PathPattern 参数。 Path 参数使用 $PSHelp 变量来获取路径。 Pattern 参数使用字符串About_作为搜索条件。

若要运行函数,请键入 Search-Help。 函数的 Select-String 命令在 PowerShell 控制台中显示输出。

示例 5:windows 事件日志中字符串的搜索

此示例在 Windows 事件日志中搜索字符串。 变量 $_ 表示管道中的当前对象。 有关详细信息,请参阅 about_Automatic_Variables

$Events = Get-WinEvent -LogName Application -MaxEvents 50
$Events | Select-String -InputObject {$_.message} -Pattern 'Failed'

cmdlet Get-WinEvent 使用 LogName 参数指定应用程序日志。 MaxEvents 参数从日志中获取 50 个最新事件。 日志内容存储在名为 的 $Events变量中。

变量 $Events 在管道中向下发送到 Select-String cmdlet。 Select-String 使用 InputObject 参数。 变量 $_ 表示当前对象,是 message 事件的属性。 Pattern 参数对字符串“失败”进行种种,并在 中$_.message搜索匹配项。 Select-String 在 PowerShell 控制台中显示输出。

示例 6:在子目录中查找字符串

此示例在目录及其所有子目录中搜索特定文本字符串。

Get-ChildItem -Path C:\Windows\System32\*.txt -Recurse | Select-String -Pattern 'Microsoft' -CaseSensitive

Get-ChildItem 使用 Path 参数指定 C:\Windows\System32*.txtRecurse 参数包括子目录。 对象在管道中向下发送到 Select-String

Select-String 使用 Pattern 参数并指定字符串 MicrosoftCaseSensitive 参数用于匹配字符串的确切大小写。 Select-String 在 PowerShell 控制台中显示输出。

注意

根据你的权限,你可能会在输出中看到 “拒绝访问” 消息。

示例 7:查找与模式不匹配的字符串

此示例演示如何排除与模式不匹配的数据行。

Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get', 'Set'  -NotMatch

cmdlet Get-Command 将对象向下发送到 管道, Out-File 以在当前目录中创建 Command.txt 文件。 Select-String 使用 Path 参数指定 Command.txt 文件。 Pattern 参数将 GetSet 指定为搜索模式。 NotMatch 参数从结果中排除 GetSetSelect-String 在 PowerShell 控制台中显示不包含 “获取”“设置”的输出。

示例 8:查找匹配项前后的线条

此示例演示如何获取匹配模式前后的线条。

Get-Command | Out-File -FilePath .\Command.txt
Select-String -Path .\Command.txt -Pattern 'Get-Computer' -Context 2, 3

Command.txt:986:Cmdlet          Get-CmsMessage           6.1.0.0    Microsoft.PowerShell.Security
  Command.txt:987:Cmdlet          Get-Command              6.1.2.0    Microsoft.PowerShell.Core
> Command.txt:988:Cmdlet          Get-ComputerInfo         6.1.0.0    Microsoft.PowerShell.Management
  Command.txt:990:Cmdlet          Get-Content              6.1.0.0    Microsoft.PowerShell.Management
  Command.txt:991:Cmdlet          Get-ControlPanelItem     3.1.0.0    Microsoft.PowerShell.Management
  Command.txt:992:Cmdlet          Get-Credential           6.1.0.0    Microsoft.PowerShell.Security

cmdlet Get-Command 将对象向下发送到 管道, Out-File 以在当前目录中创建 Command.txt 文件。 Select-String 使用 Path 参数指定 Command.txt 文件。 Pattern 参数指定Get-Computer为搜索模式。 Context 参数使用两个值(之前和之后),并使用尖括号 (>) 标记输出中的模式匹配项。 Context 参数输出第一个模式匹配之前的两行和最后一个模式匹配后的三行。

示例 9:查找所有模式匹配项

此示例演示 AllMatches 参数如何查找文本行中的每个模式匹配项。 默认情况下, Select-String 仅在文本行中查找模式的第一个匹配项。 此示例使用通过 cmdlet 找到 Get-Member 的对象属性。

$A = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell'
$A

C:\Program Files\PowerShell\7\en-US\default.help.txt:3:    PowerShell Help System
C:\Program Files\PowerShell\7\en-US\default.help.txt:6:    Displays help about PowerShell cmdlets and concepts.
C:\Program Files\PowerShell\7\en-US\default.help.txt:9:    PowerShell Help describes PowerShell cmdlets

$A.Matches

Groups   : {0}
Success  : True
Name     : 0
Captures : {0}
Index    : 4
Length   : 10
Value    : PowerShell

$A.Matches.Length

8

$B = Get-ChildItem -Path "$PSHOME\en-US\*.txt" | Select-String -Pattern 'PowerShell' -AllMatches
$B.Matches.Length

9

cmdlet Get-ChildItem 使用 Path 参数。 Path 参数使用指定 PowerShell 目录的变量$PSHOME。 路径的其余部分包括子目录 en-US ,并指定目录中的每个 *.txt 文件。 对象 Get-ChildItem 存储在 变量中 $A 。 变量 $A 在管道中向下发送到 Select-String cmdlet。 Select-String 使用 Pattern 参数在每个文件中搜索字符串 PowerShell

在 PowerShell 命令行中 $A ,将显示变量内容。 有一行包含字符串 PowerShell 的两个匹配项。

属性 $A.Matches 列出了每行上第一个出现的模式 PowerShell

属性 $A.Matches.Length 对每行上第一次出现的模式 PowerShell 进行计数。

变量 $B 使用相同的 Get-ChildItemSelect-String cmdlet,但添加了 AllMatches 参数。 AllMatches 在每一行上查找 模式 PowerShell 的每个匹配项。 和 $B 变量中$A存储的对象是相同的。

属性 $B.Matches.Length 增加是因为对于每一行,将计算 模式 PowerShell 的每次出现次数。

示例 10 - 使用“Out-String”将管道对象转换为字符串

ToString()通过管道传递的对象的结果与 PowerShell 的格式设置系统生成的富字符串表示形式不同。 因此,可能需要首先通过管道将对象传递给 Out-String

管道 将 Out-String 格式化的输出转换为单个多行字符串对象。 这意味着,当找到匹配项时 Select-String ,它会输出整个多行字符串。

PS> $hash = @{
    Name = 'foo'
    Category = 'bar'
}

# !! NO output, due to .ToString() conversion
$hash | Select-String -Pattern 'foo'

# Out-String converts the output to a single multi-line string object
PS> $hash | Out-String | Select-String -Pattern 'foo'

Name                           Value
----                           -----
Name                           foo
Category                       bar

# Out-String -Stream converts the output to a multiple single-line string objects
PS> $hash | Out-String -Stream | Select-String -Pattern 'foo'

Name                           foo

通过 Out-String -Stream 管道将格式化的输出转换为多个单行字符串对象。 这意味着,当找到匹配项时 Select-String ,它仅输出匹配的行。

参数

-AllMatches

指示 cmdlet 在每行文本中搜索多个匹配项。 如果没有此参数, Select-String 则仅查找每行文本中的第一个匹配项。

在一行文本中找到多个匹配项时 Select-String ,它仍然只为该行发出一个 MatchInfo 对象,但对象的 Matchs 属性包含所有匹配项。

注意

SimpleMatch 参数结合使用时,将忽略此参数。 如果要返回所有匹配项,并且要搜索的模式包含正则表达式字符,则必须转义这些字符,而不是使用 SimpleMatch。 有关转义正则表达式的详细信息,请参阅 about_Regular_Expressions

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-CaseSensitive

指示 cmdlet 匹配项区分大小写。 默认情况下,匹配项不区分大小写。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Context

捕获与模式匹配的行之前和之后的指定行数。

如果你输入一个数字作为此参数的值,则该数字将确定捕获的匹配项前后的行数。 如果你输入两个数字作为此参数的值,则第一个数字将确定该匹配项前面的行数,第二个数字将确定该匹配项后面的行数。 例如 -Context 2,3

在默认显示中,带有匹配项的行由右尖括号 (>) (显示的第一列中的 ASCII 62) 指示。 无标记行是上下文。

Context 参数不会更改 生成的Select-String对象数。 Select-String 为每个匹配生成一个 MatchInfo 对象。 上下文作为字符串数组存储在 对象的 Context 属性中。

当命令 Select-String 的输出沿管道发送到另一个 Select-String 命令时,接收命令仅搜索匹配行中的文本。 匹配的行是 MatchInfo 对象的 Line 属性的值,而不是上下文行中的文本。 因此, Context 参数在接收 Select-String 命令上无效。

当上下文包含匹配项时,每个匹配项的 MatchInfo 对象包括所有上下文行,但重叠的行在显示中只出现一次。

Type:Int32[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Culture

指定与指定模式匹配的区域性名称。 Culture 参数必须与 SimpleMatch 参数一起使用。 默认行为使用当前 PowerShell 运行空间 (会话) 的区域性。

若要获取所有受支持的区域性的列表,请使用 Get-Culture -ListAvailable 命令。

此外,此参数接受以下参数:

  • CurrentCulture,默认值;
  • 序号,即非语言二进制比较;
  • 固定,即与区域性无关的比较。

使用 Select-String -Culture Ordinal -CaseSensitive -SimpleMatch 命令可以获得最快的二进制比较。

Culture 参数使用 Tab 自动补全功能滚动浏览指定可用区域性的参数列表。 若要列出所有可用参数,请使用以下命令:

(Get-Command Select-String).Parameters.Culture.Attributes.ValidValues

有关 .NET CultureInfo.Name 属性的详细信息,请参阅 CultureInfo.Name

Culture 参数是在 PowerShell 7 中引入的。

Type:String
Position:Named
Default value:Culture of the current PowerShell session
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Encoding

指定目标文件的编码类型。 默认值为 utf8NoBOM

此参数的可接受值如下所示:

  • ascii:使用 ASCII (7 位) 字符集的编码。
  • bigendianunicode:使用 big-endian 字节顺序以 UTF-16 格式进行编码。
  • bigendianutf32:使用 big-endian 字节顺序以 UTF-32 格式进行编码。
  • oem:对 MS-DOS 和控制台程序使用默认编码。
  • unicode:使用 little-endian 字节顺序以 UTF-16 格式进行编码。
  • utf7:以 UTF-7 格式编码。
  • utf8:以 UTF-8 格式编码。
  • utf8BOM:使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码
  • utf8NoBOM:不带字节顺序标记的 UTF-8 格式编码 (BOM)
  • utf32:以 UTF-32 格式编码。

从 PowerShell 6.2 开始, Encoding 参数还允许注册代码页的数字 ID () -Encoding 1251 或已注册代码页的字符串名称 () -Encoding "windows-1251" 。 有关详细信息,请参阅 Encoding.CodePage 的 .NET 文档。

注意

不再建议使用 UTF-7* 。 从 PowerShell 7.1 起,如果为 Encoding 参数指定 utf7 ,则会写入警告。

Type:Encoding
Accepted values:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
Default value:UTF8NoBOM
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Exclude

排除指定项。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 *.txt。 允许使用通配符。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-Include

包括指定项。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 *.txt。 允许使用通配符。

Type:String[]
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:True

-InputObject

指定要搜索的文本。 输入一个包含该文本的变量,或键入可获取该文本的命令或表达式。

使用 InputObject 参数与将字符串从管道向下发送到 Select-String不同。

通过管道将多个字符串传递给 Select-String cmdlet 时,它会搜索每个字符串中的指定文本,并返回包含搜索文本的每个字符串。

使用 InputObject 参数提交字符串集合时, Select-String 会将该集合视为单个组合字符串。 Select-String 如果在任何字符串中找到搜索文本,则返回字符串作为一个单元。

FileInfo 对象被视为文件的路径。 指定文件路径时, Select-String 搜索文件的内容,而不是 ToString() 对象的表示形式。

Type:PSObject
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-List

仅从每个输入文件返回匹配文本的第一个实例。 这是检索内容与正则表达式匹配的文件列表的最有效方法。

默认情况下, Select-String 为找到的每个匹配项返回一个 MatchInfo 对象。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-LiteralPath

指定要搜索的文件的路径。 LiteralPath 参数的值与键入时完全相同。 不会将任何字符解释为通配符。 如果路径包括转义符,请将其括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。 有关详细信息,请参阅 about_Quoting_Rules

Type:String[]
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoEmphasis

默认情况下, Select-String 突出显示与使用 Pattern 参数搜索的模式匹配的字符串。 NoEmphasis 参数禁用突出显示。

强调使用基于 PowerShell 背景和文本颜色的负色。 例如,如果 PowerShell 颜色是带有白色文本的黑色背景。 强调的是带有黑色文本的白色背景。

此参数是在 PowerShell 7 中引入的。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-NotMatch

NotMatch 参数查找与指定模式不匹配的文本。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Path

指定要搜索的文件的路径。 允许使用通配符。 默认位置为本地目录。

指定目录中的文件,例如 log1.txt*.doc*.*。 如果仅指定一个目录,则该命令将失败。

Type:String[]
Position:1
Default value:Local directory
Required:True
Accept pipeline input:True
Accept wildcard characters:True

-Pattern

指定要在每行上查找的文本。 模式值被视为正则表达式。

若要了解正则表达式,请参阅 about_Regular_Expressions

Type:String[]
Position:0
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Quiet

指示 cmdlet 返回一个布尔值 (True 或 False) ,而不是 MatchInfo 对象。 如果找到模式,则值为 True;否则值为 False。

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Raw

使 cmdlet 仅输出匹配的字符串,而不是 MatchInfo 对象。 这是与 Unix grep 或 Windows findstr.exe 命令最相似的行为的结果。

此参数是在 PowerShell 7 中引入的。

Type:SwitchParameter
Position:Named
Default value:False
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-SimpleMatch

指示 cmdlet 使用简单匹配而不是正则表达式匹配。 在简单匹配中, Select-String 在输入中搜索 Pattern 参数中的文本。 它不会将 Pattern 参数的值解释为正则表达式语句。

此外,使用 SimpleMatch 时,返回的 MatchInfo 对象的 Matchs 属性为空。

注意

当此参数与 AllMatches 参数一起使用时,将忽略 AllMatches

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

输入

PSObject

可以通过管道将具有 ToString() 方法的任何对象传递给此 cmdlet。

输出

MatchInfo

默认情况下,此 cmdlet 为找到的每个匹配项返回一个 MatchInfo 对象。

Boolean

使用 Quiet 参数时,此 cmdlet 将返回一个 布尔 值,该值指示是否找到了模式。

String

使用 Raw 参数时,此 cmdlet 将返回一组与模式匹配的 String 对象。

备注

PowerShell 包含以下别名 Select-String

  • 所有平台:
    • sls

Select-Stringgrep类似于 UNIX 或 findstr.exe Windows 中的 。

sls cmdlet 的Select-String别名是在 PowerShell 3.0 中引入的。

注意

根据 PowerShell 命令的已批准谓词,cmdlet 的官方别名前缀 Select-*sc,而不是 sl。 因此, 的正确别名 Select-String 应为 scs,而不是 sls。 这是此规则的例外。

将 对象管道传递到 Select-String时:

  • FileInfo 对象被视为文件的路径。 指定文件路径时, Select-String 搜索文件的内容,而不是 ToString() 对象的表示形式。
  • ToString()通过管道传递的对象的结果与 PowerShell 的格式设置系统生成的富字符串表示形式不同。 因此,可能需要首先通过管道将对象传递给 Out-String 。 有关详细信息,请参阅示例 10。

若要使用 Select-String,请键入要查找为 Pattern 参数值的文本。 若要指定要搜索的文本,请使用以下条件:

  • 在带引号的字符串中键入文本,然后通过管道将其传递给 Select-String
  • 将文本字符串存储在变量中,然后将该变量指定为 InputObject 参数的值。
  • 如果文本存储在文件中,请使用 Path 参数指定文件的路径。

默认情况下, Select-StringPattern 参数的值解释为正则表达式。 有关详细信息,请参阅 about_Regular_Expressions。 可以使用 SimpleMatch 参数替代正则表达式匹配。 SimpleMatch 参数在输入中查找 Pattern 参数值的实例。

的默认输出 Select-StringMatchInfo 对象,其中包括有关匹配项的详细信息。 在文件中搜索文本时, 对象中的信息非常有用,因为 MatchInfo 对象具有 FilenameLine 等属性。 如果输入不是来自该文件,则这些参数的值为 InputStream

如果不需要 MatchInfo 对象中的信息,请使用 Quiet 参数。 Quiet 参数返回一个布尔值 (True 或 False) ,以指示它是否找到了匹配项,而不是 MatchInfo 对象。

匹配短语时, Select-String 使用为系统设置的当前区域性。 若要查找当前区域性,请使用 Get-Culture cmdlet。

若要查找 MatchInfo 对象的属性,请键入以下命令:

Select-String -Path test.txt -Pattern 'test' | Get-Member | Format-List -Property *