共用方式為


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>]

Description

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-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 數據流擷取數據。 串流可用來儲存隱藏的數據,例如屬性、安全性設定或其他數據。 它們也可以儲存在目錄上,而不做子專案。

範例 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

指定內容應讀取為位元組數據流。 AsByteStream 參數是在 Windows PowerShell 6.0 中引進的。

當您搭配 Encoding 參數使用 AsByteStream 參數時,就會發生警告。 AsByteStream 參數會忽略任何編碼,並將輸出當做位元組數據流傳回。

讀取和寫入二進位檔時,請使用 AsByteStream 參數和 ReadCount 參數的 0 值。 ReadCount 值 0 會在單一讀取作業中讀取整個檔案。 預設 的 ReadCount 值 1 會讀取每個讀取作業中的一個字節,並將每個位元組轉換成個別的物件。 除非搭配 使用 AsByteStream 參數,Set-Content否則管線單一位元組輸出會造成Set-Content錯誤。

類型: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 會將整個檔案當做單一未分割的物件傳回。

您可以使用此參數,將大型檔案分割成較小的檔案,方法是將檔案分隔符指定為分隔符。 分隔符會保留(未捨棄),並成為每個檔案區段中的最後一個專案。

分隔符是 FileSystem 提供者新增至 Cmdlet 的Get-Content動態參數。 此參數僅適用於檔案系統磁碟驅動器。

注意

目前,當 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:使用位元組順序以UTF-16格式編碼。
  • utf7:以 UTF-7 格式編碼。
  • utf8:以 UTF-8 格式編碼。
  • utf8BOM:使用位元節順序標記以 UTF-8 格式編碼 (BOM)
  • utf8NoBOM:以 UTF-8 格式編碼,不含位元組順序標記 (BOM)
  • utf32:以 UTF-32 格式編碼。

編碼是 FileSystem 提供者新增至 Cmdlet 的Get-Content動態參數。 此參數僅適用於檔案系統磁碟驅動器。

從 PowerShell 6.2 開始,Encoding 參數也允許已註冊代碼頁的數值識別元(例如 -Encoding 1251)或已註冊代碼頁的字串名稱(例如 )。-Encoding "windows-1251" 如需詳細資訊,請參閱 Encoding.CodePage.NET 檔。

從 PowerShell 7.4 開始,您可以使用 Ansi Encoding 參數的值,傳遞目前文化特性 ANSI 代碼頁的數值標識碼,而不需要手動指定它。

注意

不再建議使用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。 允許通配符。

Exclude 參數只有在命令包含項目的內容時有效,例如 C:\Windows\*,通配符會指定目錄的內容C:\Windows

類型: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"。 允許通配符。 Include 參數只有在命令包含項目的內容時有效,例如 C:\Windows\*,其中通配符會指定目錄的內容C:\Windows

類型: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 中引進的。

Raw 是 FileSystem 提供者新增至 Cmdlet 的Get-Content動態參數。此參數只適用於文件系統磁碟驅動器。

類型:SwitchParameter
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-ReadCount

指定一次透過管線傳送多少行內容。 預設值是 1秒。 值為 0 (零) 或負數會一次傳送所有內容。

此參數不會變更顯示的內容,但會影響顯示內容所需的時間。 當 ReadCount 的值增加時,傳回第一行所需的時間會增加,但作業的總時間會減少。 這在大型專案中可能會產生明顯的差異。

類型:Int64
Position:Named
預設值:1
必要:False
接受管線輸入:True
接受萬用字元:False

-Stream

注意

此參數僅適用於 Windows。

從檔案取得指定之替代NTFS檔案數據流的內容。 輸入數據流名稱。 不支援通配符。

Stream 是 FileSystem 提供者新增至 Cmdlet 的Get-Content動態參數。 此參數僅適用於 Windows 系統上的文件系統磁碟驅動器。

此參數是在 Windows PowerShell 3.0 中引進的。 在 PowerShell 7.2 中, Get-Content 可以從目錄和檔案擷取替代數據流的內容。

類型:String
Position:Named
預設值:None
必要:False
接受管線輸入:False
接受萬用字元:False

-Tail

指定檔案結尾或其他項目的行數。 您可以使用 Tail 參數名稱或其別名 Last。 的值 0 不會傳回任何行。 負值會造成錯誤。

此參數是在 PowerShell 3.0 中引進的。

類型:Int32
別名:Last
Position:Named
預設值:None
必要:False
接受管線輸入:True
接受萬用字元:False

-TotalCount

指定檔案或其他項目開頭的行數。 的值 0 不會傳回任何行。 負值會造成錯誤。

您可以使用 TotalCount 參數名稱或其別名 First Head

類型: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 提供者新增至 Cmdlet 的 Get-Content 動態參數。 此參數僅適用於檔案系統磁碟驅動器。 等候 無法與 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

Cmdlet Get-Content 的設計目的是要處理任何提供者所公開的數據。 若要在您的會話中取得提供者,請使用 Get-PSProvider Cmdlet。 如需詳細資訊,請參閱 about_Providers