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>]
说明
cmdlet Get-Content
在路径指定的位置获取项的内容,例如文件中的文本或函数的内容。 对于文件,内容一次读取一行,并返回对象的集合,每个对象表示一行内容。
从 PowerShell 3.0 开始, Get-Content
还可以从项的开头或结尾获取指定数量的行。
示例
示例 1:获取文本文件的内容
此示例获取当前目录中文件的内容。 该文件 LineNumbers.txt
的格式为 100 行, 这是 X 行 ,在几个示例中使用。
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
文件。 当每个对象在管道中向下发送时, 变量 $_
表示数组值。 cmdlet Get-Content
使用 Path 参数指定 LineNumbers.txt
文件并在 PowerShell 控制台中显示内容。
示例 2:限制 Get-Content 返回的行数
此命令获取文件的前五行。 TotalCount 参数获取前五行内容。 此示例使用 LineNumbers.txt
示例 1 中引用的 。
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 行内容。 此示例使用 LineNumbers.txt
示例 1 中引用的文件。
(Get-Content -Path .\LineNumbers.txt -TotalCount 25)[-1]
This is Line 25
命令 Get-Content
括在括号中,以便命令在转到下一步之前完成。 Get-Content
返回行数组,这允许您在括号后面添加索引表示法以检索特定的行号。 在本例中 [-1]
,索引指定返回的 25 个检索行数组中的最后一个索引。
示例 4:获取文本文件的最后一行
此命令从文件获取最后一行内容。 此示例使用在 LineNumbers.txt
示例 1 中创建的文件。
Get-Item -Path .\LineNumbers.txt | Get-Content -Tail 1
This is Line 100
此示例使用 Get-Item
cmdlet 演示如何通过管道将文件传递给 Get-Content
。 Tail 参数获取文件的最后一行。 此方法比使用 [-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
流中检索数据。 流 可用于存储隐藏数据,例如属性、安全设置或其他数据。 它们还可以存储在目录中,而不作为子项。
示例 6:获取原始内容
此示例中的命令以一个字符串而不是字符串数组的形式获取文件的内容。 默认情况下,如果没有 Raw 动态参数,内容将作为换行符分隔的字符串数组返回。 此示例使用 LineNumbers.txt
示例 1 中引用的文件。
$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
可以指定 cmdlet 的 Get-Content
筛选器。 使用筛选器限定 Path 参数时,需要包含尾随星号 (*
) 以指示路径的内容。
以下命令获取目录中所有 *.log
文件 C:\Temp
的内容。
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
指定应以字节流的形式读取内容。 Windows PowerShell 6.0 中引入了 AsByteStream 参数。
将 AsByteStream 参数与 Encoding 参数一起使用时,会出现警告。 AsByteStream 参数忽略任何编码,输出将作为字节流返回。
读取和写入二进制文件时,对 ReadCount 参数使用 AsByteStream 参数和值 0。 ReadCount 值 0 在单个读取操作中读取整个文件。 默认 的 ReadCount 值 1 在每次读取操作中读取一个字节,并将每个字节转换为单独的 对象。 除非将 AsByteStream 参数与 一起使用Set-Content
,否则将单字节输出管道连接到 Set-Content
会导致错误。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Credential
注意
随 PowerShell 一起安装的任何提供程序都不支持此参数。 若要模拟其他用户,或在运行此 cmdlet 时提升凭据,请使用 Invoke-Command。
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Delimiter
指定在读取文件时使用 分隔符 Get-Content
将文件划分为对象。 默认值为 \n
,即行尾字符。 读取文本文件时, Get-Content
返回字符串对象的集合,每个对象以行尾字符结尾。 输入文件中不存在的分隔符时, Get-Content
将返回整个文件作为单个未计算的对象。
可以通过指定文件分隔符作为分隔符,使用此参数将大型文件拆分为较小的文件。 分隔符将被保留(不会被丢弃),并且成为每个文件部分中的最后一项。
Delimiter 是 FileSystem 提供程序添加到 cmdlet 中的 Get-Content
动态参数。 此参数仅在文件系统驱动器中有效。
注意
目前,当 Delimiter 参数的值为空字符串时, Get-Content
不会返回任何内容。 这是已知问题。 强制 Get-Content
将整个文件作为单个未计算的字符串返回。 输入文件中不存在的值。
Type: | String |
Position: | Named |
Default value: | End-of-line character |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | 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
:以 UTF-8 格式编码,不带字节顺序标记 (BOM)utf32
:以 UTF-32 格式进行编码。
编码是 FileSystem 提供程序添加到 cmdlet 的 Get-Content
动态参数。
此参数仅在文件系统驱动器中可用。
从 PowerShell 6.2 开始, Encoding 参数还允许使用已注册代码页的数字 ID (如 -Encoding 1251
) 或已注册代码页的字符串名称 () -Encoding "windows-1251"
。 有关详细信息,请参阅 Encoding.CodePage 的 .NET 文档。
从 PowerShell 7.4 开始,可以使用 Ansi
Encoding 参数的值传递当前区域性 ANSI 代码页的数字 ID,而无需手动指定它。
注意
不再建议使用 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
指定此 cmdlet 在操作中排除的一个或多个项作为字符串数组。 此参数值使 Path 参数有效。
请输入路径元素或模式,例如 *.txt
。 允许使用通配符。
仅当命令包含项的内容(例如 C:\Windows\*
),其中通配符指定目录的内容C:\Windows
时,Exclude 参数才有效。
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Filter
指定用于限定 Path 参数的筛选器。 FileSystem 提供程序是唯一支持使用筛选器的已安装 PowerShell 提供程序。 可以在 about_Wildcards 中找到 FileSystem 筛选器语言的语法。 筛选器比其他参数更高效,因为提供程序在 cmdlet 获取对象时应用它们,而不是在检索对象后让 PowerShell 筛选对象。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-Force
强制 可以替代只读属性或创建目录以完成文件路径。 Force 参数不会尝试更改文件权限或覆盖安全限制。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Include
指定此 cmdlet 将在操作中包含的一个项或多个项(作为一个字符串数组)。 此参数值使 Path 参数有效。 请输入路径元素或模式,例如 "*.txt"
。 允许使用通配符。 仅当命令包含项的内容(例如 C:\Windows\*
),其中通配符指定目录的内容C:\Windows
时,Include 参数才有效。
Type: | String[] |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | True |
-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 |
-Path
指定获取内容的项 Get-Content
的路径。 允许使用通配符。 此路径必须是指向该项的路径,而不是容器的路径。 例如,必须指定一个或多个文件的路径,而不是目录的路径。
Type: | String[] |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | True |
-Raw
忽略换行符,并在一个字符串中返回文件的全部内容,并保留换行符。 默认情况下,文件中的换行符用作分隔符,将输入分隔成字符串数组。 此参数是在 PowerShell 3.0 中引入的。
Raw 是 FileSystem 提供程序添加到 cmdlet 的 Get-Content
动态参数。此参数仅适用于文件系统驱动器。
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-ReadCount
指定每次通过管道发送的内容行数。 默认值为 1。 值为 0 (零) 或负数一次发送所有内容。
此参数不会更改显示的内容,但它会影响显示内容所需的时间。 随着 ReadCount 的值增加,返回第一行所用的时间将会增加,但该操作的总计时间将会减少。 这在大型项中可能会产生明显的差异。
Type: | Int64 |
Position: | Named |
Default value: | 1 |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Stream
注意
此参数仅在 Windows 上可用。
从文件中获取指定的备用 NTFS 文件流的内容。 输入流名称。 不支持通配符。
Stream是 FileSystem 提供程序添加到 cmdlet 的Get-Content
动态参数。
此参数仅适用于 Windows 系统上的文件系统驱动器。
已在 Windows PowerShell 3.0 中引入了此参数。 在 PowerShell 7.2 中, Get-Content
可以从目录和文件中检索备用数据流的内容。
Type: | String |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Tail
从文件或其他项的结尾处指定行数。 可以使用 Tail 参数名称或其别名 Last。 负值会导致 cmdlet 返回整个内容。
此参数是在 PowerShell 3.0 中引入的。
Type: | Int32 |
Aliases: | Last |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-TotalCount
从文件或其他项的开始处指定行数。 负值会导致 cmdlet 返回整个内容。
可以使用 TotalCount 参数名称或其别名 ,First 或 Head。
Type: | Int64 |
Aliases: | First, Head |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-Wait
导致 cmdlet 无限期等待,使文件保持打开状态,直到中断。 等待时, Get-Content
每秒检查文件一次,并输出新行(如果存在)。 与 TotalCount 参数一起使用时, Get-Content
将等待指定数量的行在指定文件中可用。 例如,如果将 TotalCount 指定为 10,并且文件已有 10 行或更多行, Get-Content
则返回 10 行并退出。 如果文件的行数少于 10 行, Get-Content
则在到达时输出每行,但会等到第十行到达,然后退出。
可以通过按 Ctrl+C 来中断等待。 删除文件会导致非终止错误,同时中断等待。
Wait 是 FileSystem 提供程序添加到 cmdlet 中的 Get-Content
动态参数。 此参数仅在文件系统驱动器中有效。 等待 不能与 Raw 组合使用。
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
输入
可以通过管道将读取计数或总计计数传递给此 cmdlet。
String[]
可以通过管道将路径传递给此 cmdlet。
可以通过管道将凭据传递给此 cmdlet。
输出
使用 AsByteStream 参数时,此 cmdlet 以字节的形式返回内容。
默认情况下,此 cmdlet 以字符串数组的形式返回内容,每行一个。 使用 Raw 参数时,它将返回包含文件中每一行的单个字符串。
备注
PowerShell 包含以下别名 Get-Content
:
- 所有平台:
gc
type
- Windows:
cat
该 Get-Content
cmdlet 旨在处理由任何提供程序公开的数据。 若要获取会话中的提供程序,请使用 Get-PSProvider
cmdlet。 有关详细信息,请参阅 about_Providers。