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 コマンドレットは、ファイル内のテキストや関数の内容など、パスで指定された場所にある項目の内容を取得します。 ファイルの場合、コンテンツは一度に 1 行ずつ読み取られ、それぞれがコンテンツ行を表すオブジェクトのコレクションを返します。

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 コマンドレットに送信されます。 ForEach-Object では、 Add-Content コマンドレットを含むスクリプト ブロックを使用して、 LineNumbers.txt ファイルを作成します。 変数 $_ は、各オブジェクトがパイプラインに送信されるときに配列値を表します。 Get-Content コマンドレットは、Path パラメーターを使用してLineNumbers.txt ファイルを指定し、PowerShell コンソールにコンテンツを表示します。

例 2: Get-Content から返される行数を制限する

このコマンドは、ファイルの最初の 5 行を取得します。 TotalCount パラメーターは、コンテンツの最初の 5 行を取得します。 この例では、例 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 コマンドレットを使用して、ファイルをパイプして Get-Contentできることを示します。 Tail パラメーターは、ファイルの最後の行を取得します。 このメソッドは、変数内のすべての行を取得し、 [-1] インデックス表記を使用するよりも高速です。

例 5: 代替データ ストリームのコンテンツを取得する

この例では、 Stream パラメーターを使用して、Windows NTFS ボリュームに格納されているファイルの代替データ ストリームのコンテンツを取得する方法について説明します。 この例では、 Set-Content コマンドレットを使用して、 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: 生のコンテンツを取得する

この例のコマンドは、文字列の配列ではなく、1 つの文字列としてファイルの内容を取得します。 既定では、 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 コマンドレットにフィルターを指定できます。 フィルターを使用して Path パラメーターを修飾する場合は、パスの内容を示す末尾のアスタリスク (*) を含める必要があります。

次のコマンドは、C:\Temp ディレクトリ内のすべての*.log ファイルの内容を取得します。

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

例 8: ファイルの内容をバイト配列として取得する

この例では、ファイルの内容を 1 つのオブジェクトとして [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 は、1 回の読み取り操作でファイル全体を読み取ります。 既定の ReadCount 値 1 は、読み取り操作ごとに 1 バイトを読み取り、各バイトを個別のオブジェクトに変換します。 Set-ContentAsByteStream パラメーターを使用しない限り、1 バイト出力を Set-Content にパイプするとエラーが発生します。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Credential

Note

このパラメーターは、PowerShell でインストールされているプロバイダーではサポートされていません。 別のユーザーを偽装したり、このコマンドレットの実行時に資格情報を昇格したりするには、 Invoke-Command を使用します。

型:PSCredential
配置:Named
規定値:Current user
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Delimiter

ファイルを読み取り中にオブジェクトに分割するために使用 Get-Content 区切り記号を指定します。 既定値は \n で、行末文字です。 テキスト ファイルを読み取るとき、 Get-Content は文字列オブジェクトのコレクションを返します。それぞれの末尾は行末文字になります。 ファイルに存在しない区切り記号を入力すると、 Get-Content はファイル全体を 1 つの非制限オブジェクトとして返します。

このパラメーターを使用すると、区切り記号としてファイル区切り記号を指定することで、大きなファイルをより小さなファイルに分割できます。 区切り記号は保持され (破棄されません)、各ファイル セクションの最後の項目になります。

Delimiter は、 FileSystem プロバイダーが Get-Content コマンドレットに追加する動的パラメーターです。 このパラメーターはファイル システム ドライブでのみ機能します。

Note

現在、 Delimiter パラメーターの値が空の文字列の場合、 Get-Content は何も返しません。 これは既知の問題です。 Get-Contentがファイル全体を単一の非制限文字列として返すように強制する場合。 ファイルに存在しない値を入力します。

型:String
配置:Named
規定値:End-of-line character
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Encoding

ターゲット ファイルのエンコードの種類を指定します。 既定値は utf8NoBOM です。

このパラメーターに使用できる値は次のとおりです。

  • ascii: ASCII (7 ビット) 文字セットのエンコードを使用します。
  • ansi: 現在のカルチャの ANSI コード ページのエンコードを使用します。 このオプションは PowerShell 7.4 で追加されました。
  • bigendianunicode: ビッグ エンディアンバイト順を使用して UTF-16 形式でエンコードします。
  • bigendianutf32: ビッグ エンディアンバイト順を使用して UTF-32 形式でエンコードします。
  • oem: MS-DOS およびコンソール プログラムの既定のエンコードを使用します。
  • unicode: リトル エンディアンバイト順を使用して UTF-16 形式でエンコードします。
  • utf7: UTF-7 形式でエンコードします。
  • utf8: UTF-8 形式でエンコードします。
  • utf8BOM: バイト オーダー マーク (BOM) を使用して UTF-8 形式でエンコードします。
  • utf8NoBOM: バイト オーダー マーク (BOM) を使用せずに UTF-8 形式でエンコードします。
  • utf32: UTF-32 形式でエンコードします。

エンコードは、 FileSystem プロバイダーが Get-Content コマンドレットに追加する動的パラメーターです。 このパラメーターは、ファイル システム ドライブでのみ使用できます。

PowerShell 6.2 以降では、 Encoding パラメーターを使用すると、登録済みのコード ページの数値 ID ( -Encoding 1251 など) や登録済みコード ページの文字列名 ( -Encoding "windows-1251" など) も使用できます。 詳細については、 Encoding.CodePage の .NET ドキュメントを参照してください。

PowerShell 7.4 以降では、Encoding パラメーターのAnsi値を使用して、手動で指定しなくても、現在のカルチャの ANSI コード ページの数値 ID を渡すことができます。

Note

UTF-7* を使用することは推奨されなくなりました。 PowerShell 7.1 の時点で、Encoding パラメーターにutf7を指定すると警告が書き込まれます。

型:Encoding
指定可能な値:ASCII, BigEndianUnicode, BigEndianUTF32, OEM, Unicode, UTF7, UTF8, UTF8BOM, UTF8NoBOM, UTF32
配置:Named
規定値:UTF8NoBOM
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Exclude

文字列配列として、このコマンドレットが操作で除外する項目を指定します。 このパラメーターの値は、 Path パラメーターを修飾します。

パス要素またはパターン ( *.txtなど) を入力します。 ワイルドカード文字を使用できます。

Exclude パラメーターは、コマンドに項目の内容 (ワイルドカード文字がC:\Windows ディレクトリの内容を指定するC:\Windows\*など) が含まれている場合にのみ有効です。

型:String[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-Filter

Path パラメーターを修飾するフィルターを指定します。 FileSystem プロバイダーは、フィルターの使用をサポートする唯一のインストール済み PowerShell プロバイダーです。 FileSystem フィルター言語の構文は、about_Wildcardsにあります。 フィルターは、取得後に PowerShell でオブジェクトをフィルター処理するのではなく、コマンドレットがオブジェクトを取得するときにプロバイダーによって適用されるため、他のパラメーターよりも効率的です。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-Force

Force は、読み取り専用属性をオーバーライドするか、ディレクトリを作成してファイル パスを完了できます。 Force パラメーターは、ファイルのアクセス許可の変更やセキュリティ制限のオーバーライドを試みません。

型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Include

文字列配列として、このコマンドレットが操作に含める項目を指定します。 このパラメーターの値は、 Path パラメーターを修飾します。 パス要素またはパターン ( "*.txt"など) を入力します。 ワイルドカード文字を使用できます。 Include パラメーターは、コマンドに項目の内容 (ワイルドカード文字がC:\Windows ディレクトリの内容を指定するC:\Windows\*など) が含まれている場合にのみ有効です。

型:String[]
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:True

-LiteralPath

1 つ以上の場所へのパスを指定します。 LiteralPath の値は、型指定されたとおりに使用されます。 ワイルドカードとして解釈される文字はありません。 パスにエスケープ文字が含まれている場合は、単一引用符で囲みます。 単一引用符は、エスケープ シーケンスとして文字を解釈しないように PowerShell に指示します。

詳細については、「 about_Quoting_Rules」を参照してください。

型:String[]
Aliases:PSPath, LP
配置:Named
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Path

Get-Contentがコンテンツを取得する項目へのパスを指定します。 ワイルドカード文字を使用できます。 コンテナーのパスではなく、項目のパスを指定してください。 たとえば、ディレクトリのパスではなく、1 つ以上のファイルのパスを指定する必要があります。

型:String[]
配置:0
規定値:None
必須:True
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:True

-Raw

改行文字を無視し、改行が保持されている 1 つの文字列内のファイルの内容全体を返します。 既定では、ファイル内の改行文字は、入力を文字列の配列に分割するための区切り記号として使用されます。 このパラメーターは PowerShell 3.0 で導入されました。

Raw は、 FileSystem プロバイダーが Get-Content コマンドレットに追加する動的パラメーターです。このパラメーターは、ファイル システム ドライブでのみ機能します。

型:SwitchParameter
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-ReadCount

パイプライン経由で、一度に何行の内容を送るかを指定します。 既定値は 1です。 値が 0 (ゼロ) または負の数の場合、すべてのコンテンツが一度に送信されます。

このパラメーターは表示されるコンテンツを変更しませんが、コンテンツの表示にかかる時間には影響します。 ReadCountの値が大きくなると、最初の行を返すのにかかる時間は長くなりますが、操作の合計時間は減少します。 これにより、大きな項目で認識できる違いを生み出すことができます。

型:Int64
配置:Named
規定値:1
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Stream

Note

このパラメーターは Windows でのみ使用できます。

指定した代替 NTFS ファイル ストリームの内容をファイルから取得します。 ストリーム名を入力します。 ワイルドカードはサポートしていません。

Stream は、 FileSystem プロバイダーが Get-Content コマンドレットに追加する動的パラメーターです。 このパラメーターは、Windows システム上のファイル システム ドライブでのみ機能します。

このパラメーターは Windows PowerShell 3.0 で導入されました。 PowerShell 7.2 では、 Get-Content はディレクトリとファイルから代替データ ストリームのコンテンツを取得できます。

型:String
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

-Tail

ファイルまたは他の項目の末尾からの行数を指定します。 Tail パラメーター名またはそのエイリアスである Last を使用できます。 0の値は行を返しません。 負の値を指定するとエラーが発生します。

このパラメーターは PowerShell 3.0 で導入されました。

型:Int32
Aliases:Last
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-TotalCount

ファイルまたはその他の項目の先頭からの行数を指定します。 0の値は行を返しません。 負の値を指定するとエラーが発生します。

TotalCount パラメーター名またはそのエイリアス、First または Head を使用できます。

型:Int64
Aliases:First, Head
配置:Named
規定値:None
必須:False
パイプライン入力を受け取る:True
ワイルドカード文字を受け取る:False

-Wait

コマンドレットを無期限に待機させ、中断されるまでファイルを開いたままにします。 待機中に、 Get-Content は 1 秒に 1 回ファイルをチェックし、存在する場合は新しい行を出力します。 TotalCount パラメーターと共に使用する場合、Get-Contentは指定したファイルで指定された行数が使用可能になるまで待機します。 たとえば、 TotalCount 10 を指定し、ファイルに既に 10 行以上の行がある場合、 Get-Content は 10 行を返し、終了します。 ファイルの行数が 10 行未満の場合、 Get-Content は到着するたびに各行を出力しますが、10 行目が到着するまで待機してから終了します。

Ctrl+Cを押すと、Waitを中断できます。 ファイルを削除すると、終了しないエラーが発生し、待機も中断されます。

Wait は、FileSystem プロバイダーが Get-Content コマンドレットに追加する動的パラメーターです。 このパラメーターはファイル システム ドライブでのみ機能します。 waitRaw と組み合わせることはできません。

型:SwitchParameter
配置:Named
規定値:False
必須:False
パイプライン入力を受け取る:False
ワイルドカード文字を受け取る:False

入力

Int64

このコマンドレットには、読み取りカウントまたは合計カウントをパイプできます。

String[]

このコマンドレットにパスをパイプできます。

PSCredential

資格情報をこのコマンドレットにパイプできます。

出力

Byte

AsByteStream パラメーターを使用すると、このコマンドレットはコンテンツをバイトとして返します。

String

既定では、このコマンドレットは、1 行に 1 つずつ、文字列の配列としてコンテンツを返します。 Raw パラメーターを使用すると、ファイル内のすべての行を含む 1 つの文字列が返されます。

メモ

PowerShell には、 Get-Contentの次のエイリアスが含まれています。

  • すべてのプラットフォーム:
    • gc
    • type
  • Windows:
    • cat

Get-Content コマンドレットは、任意のプロバイダーによって公開されるデータを操作するように設計されています。 セッションでプロバイダーを取得するには、 Get-PSProvider コマンドレットを使用します。 詳細については、「 about_Providers」を参照してください。