Get-Content

获取位于指定位置的项的内容。

语法

Get-Content
   [-ReadCount <Int64>]
   [-TotalCount <Int64>]
   [-Tail <Int32>]
   [-Path] <String[]>
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-Force]
   [-Credential <PSCredential>]
   [-Delimiter <String>]
   [-Wait]
   [-Raw]
   [-Encoding <Encoding>]
   [-AsByteStream]
   [-Stream <String>]
   [<CommonParameters>]
Get-Content
   [-ReadCount <Int64>]
   [-TotalCount <Int64>]
   [-Tail <Int32>]
   -LiteralPath <String[]>
   [-Filter <String>]
   [-Include <String[]>]
   [-Exclude <String[]>]
   [-Force]
   [-Credential <PSCredential>]
   [-Delimiter <String>]
   [-Wait]
   [-Raw]
   [-Encoding <Encoding>]
   [-AsByteStream]
   [-Stream <String>]
   [<CommonParameters>]

说明

Get-Content cmdlet 获取位于路径所指定位置处的项的内容,例如文件中的文本或函数的内容。 对于文件,内容一次读取一行,并返回对象集合,每个对象表示一行内容。

从 PowerShell 3.0 开始,Get-Content 还可以从项的开头或结尾获取指定的行数。

示例

示例 1:获取文本文件的内容

此示例获取当前目录中文件的内容。 LineNumbers.txt 文件在 This is Line X 格式中有 100 行,用于几个示例中。

1..100 | ForEach-Object { Add-Content -Path .\LineNumbers.txt -Value "This is line $_." }
Get-Content -Path .\LineNumbers.txt

This is Line 1
This is Line 2
...
This is line 99.
This is line 100.

数组值 1-100 沿着管道向下发送到 ForEach-Object cmdlet。 ForEach-Object 使用包含 Add-Content cmdlet 的脚本块创建 LineNumbers.txt 文件。 变量 $_ 表示数组值,因为每个对象都沿管道向下发送。 Get-Content cmdlet 使用 Path 参数指定 LineNumbers.txt 文件并在 PowerShell 控制台中显示内容。

示例 2:限制 Get-Content 返回的行数

此命令获取文件的前五行。 TotalCount 参数获取前五行内容。 此示例使用示例 1 中引用的 LineNumbers.txt

Get-Content -Path .\LineNumbers.txt -TotalCount 5

This is Line 1
This is Line 2
This is Line 3
This is Line 4
This is Line 5

示例 3:从文本文件获取特定内容行

此命令从文件中获取特定数量的行,然后仅显示该内容的最后一行。 TotalCount 参数获取前 25 行内容。 此示例使用示例 1 中引用的 LineNumbers.txt 文件。

(Get-Content -Path .\LineNumbers.txt -TotalCount 25)[-1]

This is Line 25

Get-Content 命令包装在括号中,以便命令在转到下一步之前完成。 Get-Content 返回行数组,这样就可以在括号后面添加索引表示法来检索特定的行号。 在这种情况下,[-1] 索引指定返回的 25 个检索行数组中的最后一个索引。

示例 4:获取文本文件的最后一行

此命令从文件获取最后一行内容。 此示例使用在示例 1 中创建的 LineNumbers.txt 文件。

Get-Item -Path .\LineNumbers.txt | Get-Content -Tail 1

This is Line 100

此示例使用 Get-Item cmdlet 来演示如何通过管道将文件传递给 Get-ContentTail 参数获取文件的最后一行。 此方法比检索变量中的所有行并使用 [-1] 索引表示法更快。

示例 5:获取备用数据流的内容

此示例介绍如何使用 Stream 参数为存储在 Windows NTFS 卷上的文件获取备用数据流的内容。 在此示例中,Set-Content cmdlet 用于在名为 Stream.txt 的文件中创建示例内容。

Set-Content -Path .\Stream.txt -Value 'This is the content of the Stream.txt file'
# Specify a wildcard to the Stream parameter to display all streams of the recently created file.
Get-Item -Path .\Stream.txt -Stream *

PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Test\Stream.txt::$DATA
PSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\Test
PSChildName   : Stream.txt::$DATA
PSDrive       : C
PSProvider    : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName      : C:\Test\Stream.txt
Stream        : :$DATA
Length        : 44

# Retrieve the content of the primary stream.
# Note the single quotes to prevent variable substitution.
Get-Content -Path .\Stream.txt -Stream ':$DATA'

This is the content of the Stream.txt file

# Alternative way to get the same content.
Get-Content -Path .\Stream.txt -Stream ""
# The primary stream doesn't need to be specified to get the primary stream of the file.
# This gets the same data as the prior two examples.
Get-Content -Path .\Stream.txt

This is the content of the Stream.txt file

# Use the Stream parameter of Add-Content to create a new Stream containing sample content.
$addContentSplat = @{
    Path = '.\Stream.txt'
    Stream = 'NewStream'
    Value = 'Added a stream named NewStream to Stream.txt'
}
Add-Content @addContentSplat

# Use Get-Item to verify the stream was created.
Get-Item -Path .\Stream.txt -Stream *

PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Test\Stream.txt::$DATA
PSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\Test
PSChildName   : Stream.txt::$DATA
PSDrive       : C
PSProvider    : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName      : C:\Test\Stream.txt
Stream        : :$DATA
Length        : 44

PSPath        : Microsoft.PowerShell.Core\FileSystem::C:\Test\Stream.txt:NewStream
PSParentPath  : Microsoft.PowerShell.Core\FileSystem::C:\Test
PSChildName   : Stream.txt:NewStream
PSDrive       : C
PSProvider    : Microsoft.PowerShell.Core\FileSystem
PSIsContainer : False
FileName      : C:\Test\Stream.txt
Stream        : NewStream
Length        : 46

# Retrieve the content of your newly created Stream.
Get-Content -Path .\Stream.txt -Stream NewStream

Added a stream named NewStream to Stream.txt

Stream 参数是 FileSystem 提供程序的动态参数。 默认情况下,Get-Content 仅从默认流或 :$DATA 流中检索数据。 Streams 可用于存储隐藏的数据,例如属性、安全设置或其他数据。 它们也可以存储在非子项的目录中。

示例 6:获取原始内容

此示例中的命令将文件的内容作为一个字符串获取,而不是作为字符串数组。 默认情况下,如果没有 Raw 动态参数,内容将作为换行分隔字符串数组返回。 此示例使用示例 1 中引用的 LineNumbers.txt 文件。

$raw = Get-Content -Path .\LineNumbers.txt -Raw
$lines = Get-Content -Path .\LineNumbers.txt
Write-Host "Raw contains $($raw.Count) lines."
Write-Host "Lines contains $($lines.Count) lines."

Raw contains 1 lines.
Lines contains 100 lines.

示例 7:将筛选器与 Get-Content 配合使用

可以指定 Get-Content cmdlet 的筛选器。 使用筛选器限定 Path 参数时,需要包含尾随星号 (*),以指示路径的内容。

以下命令获取 C:\Temp 目录中所有 *.log 文件的内容。

Get-Content -Path C:\Temp\* -Filter *.log

示例 8:以字节数组的形式获取文件内容

此示例演示如何以单个对象的形式获取文件内容 [byte[]]

$byteArray = Get-Content -Path C:\temp\test.txt -AsByteStream -Raw
Get-Member -InputObject $bytearray

TypeName: System.Byte[]

Name           MemberType            Definition
----           ----------            ----------
Count          AliasProperty         Count = Length
Add            Method                int IList.Add(System.Object value)

第一个命令使用 AsByteStream 参数从文件中获取字节流。 Raw 参数可确保将字节作为 [System.Byte[]] 返回。 如果缺少 Raw 参数,则返回值为字节流,PowerShell 将其解释为 [System.Object[]]

参数

-AsByteStream

指定内容应以字节流的形式读取。 AsByteStream 参数是在 Windows PowerShell 6.0 中引入的。

AsByteStream 参数与 Encoding 参数一起使用时,将发出警告。 AsByteStream 参数会忽略任何编码,输出将作为字节流返回。

读取和写入二进制文件时,请使用 AsByteStream 参数,ReadCount 参数的值为 0。 ReadCount 值 0 将在单个读取操作中读取整个文件。 默认 ReadCount 值为 1,读取每个读取操作中的一个字节,并将每个字节转换为单独的对象。 将单字节输出管道传递给 Set-Content 会导致错误,除非对 Set-Content 使用 AsByteStream 参数。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Credential

注意

随同 PowerShell 一起安装的任何提供程序都不支持此参数。 若要模拟其他用户,或在运行此 cmdlet 时提升凭据,请使用 Invoke-Command

类型:PSCredential
Position:Named
默认值:Current user
必需:False
接受管道输入:True
接受通配符:False

-Delimiter

指定 Get-Content 用于在读取时将文件划分为对象的分隔符。 默认值为 \n,即行尾字符。 读取文本文件时,Get-Content 返回字符串对象的集合,每个对象以行尾字符结尾。 输入文件中不存在的分隔符时,Get-Content 将整个文件作为单个未完成的对象返回。

可以通过将文件分隔符指定为分隔符,使用此参数将大型文件拆分为较小的文件。 分隔符将被保留(不会被丢弃),并且成为每个文件部分中的最后一项。

DelimiterFileSystem 提供程序添加到 Get-Content cmdlet 的动态参数。 此参数仅在文件系统驱动器中有效。

注意

当前,当 Delimiter 参数的值为空字符串时,Get-Content 不会返回任何内容。 这是已知问题。 若要强制 Get-Content 将整个文件作为单个未完成的字符串返回。 输入文件中不存在的值。

类型:String
Position:Named
默认值:End-of-line character
必需:False
接受管道输入:False
接受通配符:False

-Encoding

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

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

  • ascii:对 ASCII(7 位)字符集使用编码。
  • ansi:对当前区域性的 ANSI 代码页使用编码。 此选项是在 PowerShell 7.4 中添加的。
  • 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:不使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码
  • utf32:采用 UTF-32 格式编码。

Encoding 是 FileSystem 提供程序添加到 Get-Content cmdlet 的动态参数。 此参数仅在文件系统驱动器中可用。

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

从 PowerShell 7.4 开始,可以使用 Encoding 参数的 Ansi 值来传递当前区域性 ANSI 代码页的数字 ID,而无需手动指定它。

注意

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

类型:Encoding
接受的值:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
Position:Named
默认值:UTF8NoBOM
必需:False
接受管道输入:False
接受通配符:False

-Exclude

以字符串数组的形式指定此 cmdlet 将在操作中排除的项。 此参数值使 Path 参数有效。

请输入路径元素或模式,例如 *.txt。 允许使用通配符。

仅当该命令包括项的内容时(例如 C:\Windows\*,其中通配符指定 C:\Windows 目录的内容),Exclude 参数才有效。

类型:String[]
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:True

-Filter

指定用于限定 Path 参数的筛选器。 FileSystem 提供程序是唯一支持使用筛选器的已安装 PowerShell 提供程序。 可以在 about_Wildcards 中找到 FileSystem 筛选器语言的语法。 筛选器比其他参数更有效,因为提供程序是在 cmdlet 获取对象时应用筛选器,而不是在检索对象后再让 PowerShell 筛选对象。

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:True

-Force

Force 可以替代只读属性或创建目录以完成文件路径。 Force 参数不会尝试更改文件权限或替代安全限制。

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

-Include

指定此 cmdlet 将在操作中包含的一个项或多个项(作为一个字符串数组)。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 "*.txt"。 允许使用通配符。 仅当该命令包括项的内容时(例如 C:\Windows\*,其中通配符指定 C:\Windows 目录的内容),Include 参数才有效。

类型:String[]
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:True

-LiteralPath

指定一个或多个位置的路径。 LiteralPath 的值严格按照所键入的形式使用。 不会将任何字符解释为通配符。 如果路径包括转义符,请将其括在单引号中。 单引号告知 PowerShell 不要将任何字符解释为转义序列。

有关详细信息,请参阅 about_Quoting_Rules

类型:String[]
别名:PSPath, LP
Position:Named
默认值:None
必需:True
接受管道输入:True
接受通配符:False

-Path

指定 Get-Content 获取内容的项的路径。 允许使用通配符。 此路径必须是指向该项的路径,而不是容器的路径。 例如,必须指定一个或多个文件的路径,而不是目录的路径。

类型:String[]
Position:0
默认值:None
必需:True
接受管道输入:True
接受通配符:True

-Raw

忽略换行符,并在一个字符串中返回保留换行符的文件的全部内容。 默认情况下,文件中的换行符用作分隔符,将输入分隔成字符串数组。 此参数是在 PowerShell 3.0 中引入的。

RawFileSystem 提供程序添加到 Get-Content cmdlet 的动态参数。此参数仅适用于文件系统驱动器。

类型:SwitchParameter
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-ReadCount

指定每次通过管道发送的内容行数。 默认值为 1。 值 0(零)或负数一次发送所有内容。

此参数不会更改显示的内容,但会影响显示内容所用的时间。 随着 ReadCount 的值增加,返回第一行所用的时间将增加,但该操作的总计时间会减少。 这一点在大项中可产生显而易见的差异。

类型:Int64
Position:Named
默认值:1
必需:False
接受管道输入:True
接受通配符:False

-Stream

注意

此参数仅在 Windows 上可用。

从文件中获取指定的备用 NTFS 文件流的内容。 输入流名称。 不支持通配符。

StreamFileSystem 提供程序添加到 Get-Content cmdlet 的动态参数。 此参数仅在 Windows 系统上的文件系统驱动器中有效。

已在 Windows PowerShell 3.0 中引入了此参数。 在 PowerShell 7.2 中,Get-Content 可以从目录和文件检索备用数据流的内容。

类型:String
Position:Named
默认值:None
必需:False
接受管道输入:False
接受通配符:False

-Tail

从文件或其他项的结尾处指定行数。 可以使用 Tail 参数名或其别名 Last0值不返回任何行。 负值导致错误。

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

类型:Int32
别名:Last
Position:Named
默认值:None
必需:False
接受管道输入:True
接受通配符:False

-TotalCount

从文件或其他项的开始处指定行数。 0值不返回任何行。 负值导致错误。

可以使用 TotalCount 参数名或其别名 FirstHead

类型:Int64
别名:First, Head
Position:Named
默认值:None
必需:False
接受管道输入:True
接受通配符:False

-Wait

使 cmdlet 无限期等待,使文件保持打开状态,直到中断。 等待时,每秒检查一次文件, Get-Content 并输出新行(如果存在)。 与 TotalCount 参数一起使用时,Get-Content请等待指定的行数在指定文件中可用。 例如,如果指定 TotalCount 为 10 且文件已有 10 行或更多行, Get-Content 则返回 10 行并退出。 如果文件少于 10 行, Get-Content 则在到达时输出每行,但等到第十行到达后才退出。

可以通过按 Ctrl+C 中断 Wait。 删除文件会导致中断等待的非终止错误。

Wait 是 FileSystem 提供程序添加到 Get-Content cmdlet 的动态参数。 此参数仅在文件系统驱动器中有效。 Wait 不能与 Raw结合使用。

类型:SwitchParameter
Position:Named
默认值:False
必需:False
接受管道输入:False
接受通配符:False

输入

Int64

可以通过管道将读取数或总计数传递给此 cmdlet。

String[]

可以通过管道将路径传递给此 cmdlet。

PSCredential

可以通过管道将凭据传递给此 cmdlet。

输出

Byte

使用 AsByteStream 参数时,此 cmdlet 以字节的形式返回内容。

String

默认情况下,此 cmdlet 以字符串数组的形式返回内容,每行一个。 使用 Raw 参数时,它将返回一个字符串,其中包含文件中的每一行。

备注

PowerShell 包含以下 Get-Content 别名:

  • 所有平台:
    • gc
    • type
  • Windows:
    • cat

Get-Content cmdlet 用于处理由任何提供程序公开的数据。 若要获取会话中的提供程序,请使用 Get-PSProvider cmdlet。 有关详细信息,请参阅 about_Providers