当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] Get-Content (Microsoft.PowerShell.Management)

作者:精品下载站 日期:2024-12-14 02:12:33 浏览:16 分类:玩电脑

Get-Content (Microsoft.PowerShell.Management)


Get-Content

模块 :Microsoft.PowerShell.Management

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

句法

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 文件有 100 行,格式为 This is Line 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 文件。变量 $_ 表示每个对象沿着管道发送时的数组值。 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 参数是文件系统提供程序的动态参数。默认情况下,Get-Content 仅从默认流或 :$DATA 流中检索数据。 可用于存储隐藏数据,例如属性、安全设置或其他数据。它们也可以存储在目录中而不是子项。

示例 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 在每次读取操作中读取一个字节,并将每个字节转换为单独的对象。除非将 AsByteStream 参数与 Set-Content 一起使用,否则通过管道将单字节输出传送到 Set-Content 会导致错误。

类型 :

SwitchParameter

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Credential

笔记

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

类型 :

PS凭证

位置:

命名

默认值:

当前用户

必需的:

False

接受管道输入:

True

接受通配符:

False

-Delimiter

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

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

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

笔记

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

类型 :

String

位置:

命名

默认值:

行尾字符

必需的:

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:使用小端字节顺序以 UTF-16 格式进行编码。
  • utf7:以UTF-7格式编码。
  • utf8:以UTF-8格式编码。
  • utf8BOM:使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码
  • utf8NoBOM:以 UTF-8 格式编码,不带字节顺序标记 (BOM)
  • utf32:以 UTF-32 格式编码。

编码是 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,则会写入警告。

类型 :

编码

接受的值:

ASCII、BigEndianUnicode、BigEndianUTF32、OEM、Unicode、UTF7、UTF8、UTF8BOM、UTF8NoBOM、UTF32

位置:

命名

默认值:

UTF8无BOM

必需的:

False

接受管道输入:

False

接受通配符:

False

-Exclude

以字符串数组形式指定此 cmdlet 在操作中排除的一个或多个项目。此参数的值限定 Path 参数。

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

仅当命令包含某个项目的内容时,排除参数才有效,例如C:\Windows\*,其中通配符指定的内容>C:\Windows 目录。

类型 :

String[]

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

True

-Filter

指定一个过滤器来限定 Path 参数。文件系统提供程序是唯一安装的支持使用过滤器的 PowerShell 提供程序。您可以在 about_Wildcards 中找到文件系统过滤器语言的语法。筛选器比其他参数更有效,因为提供程序在 cmdlet 获取对象时应用它们,而不是让 PowerShell 在检索对象后筛选对象。

类型 :

String

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

True

-Force

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

类型 :

SwitchParameter

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

-Include

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

类型 :

String[]

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

True

-LiteralPath

指定到一个或多个位置的路径。 LiteralPath 的值完全按照其键入的方式使用。没有字符被解释为通配符。如果路径包含转义字符,请将其用单引号引起来。单引号告诉 PowerShell 不要将任何字符解释为转义序列。

有关更多信息,请参阅 about_Quoting_Rules。

类型 :

String[]

别名:

PSPath, LP

位置:

命名

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

False

-Path

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

类型 :

String[]

位置:

0

默认值:

None

必需的:

True

接受管道输入:

True

接受通配符:

True

-Raw

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

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

类型 :

SwitchParameter

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-ReadCount

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

该参数不会改变显示的内容,但会影响显示内容所需的时间。随着ReadCount的值增加,返回第一行所花费的时间增加,但操作的总时间减少。这可以使大件物品产生明显的差异。

类型 :

整型64

位置:

命名

默认值:

1

必需的:

False

接受管道输入:

True

接受通配符:

False

-Stream

笔记

此参数仅在 Windows 上可用。

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

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

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

类型 :

String

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

False

接受通配符:

False

-Tail

指定从文件或其他项目末尾算起的行数。您可以使用Tail参数名称或其别名Last。值 0 不返回任何行。负值会导致错误。

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

类型 :

整数32

别名:

Last

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

True

接受通配符:

False

-TotalCount

指定从文件或其他项目开头算起的行数。值 0 不返回任何行。负值会导致错误。

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

类型 :

整型64

别名:

First, Head

位置:

命名

默认值:

None

必需的:

False

接受管道输入:

True

接受通配符:

False

-Wait

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

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

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

类型 :

SwitchParameter

位置:

命名

默认值:

False

必需的:

False

接受管道输入:

False

接受通配符:

False

输入

Int64

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

字符串[]

您可以通过管道传递此 cmdlet 的路径。

PSCredential

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

输出

字节

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

字符串

默认情况下,此 cmdlet 将内容作为字符串数组返回,每行一个。当您使用 Raw 参数时,它会返回包含文件中每一行的单个字符串。

笔记

PowerShell 包含以下 Get-Content 别名:

  • 所有平台:

      gc
    type
  • Windows:

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

      您需要 登录账户 后才能发表评论

      取消回复欢迎 发表评论:

      关灯