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 パラメーターを修飾する場合は、パスの内容を示す末尾のアスタリスク (*
) を含める必要があります。
次のコマンドは、*.log
ディレクトリ内のすべての C:\Temp
ファイルの内容を取得します。
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-Content
で AsByteStream パラメーターを使用しない限り、1 バイト出力を Set-Content
にパイプするとエラーが発生します。
型: | SwitchParameter |
配置: | Named |
規定値: | None |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
-Credential
手記
このパラメーターは、PowerShell でインストールされているプロバイダーではサポートされていません。 別のユーザーを偽装したり、このコマンドレットの実行時に資格情報を昇格したりするには、Invoke-Commandを使用します。
型: | PSCredential |
配置: | Named |
規定値: | Current user |
必須: | False |
パイプライン入力を受け取る: | True |
ワイルドカード文字を受け取る: | False |
-Delimiter
ファイルを読み取り中 Get-Content
オブジェクトに分割するために使用する区切り記号を指定します。 既定値は、\n
行末文字です。 テキスト ファイルを読み取るとき、Get-Content
は文字列オブジェクトのコレクションを返します。それぞれの末尾は行末文字になります。 ファイルに存在しない区切り記号を入力すると、Get-Content
はファイル全体を 1 つの非制限オブジェクトとして返します。
このパラメーターを使用すると、区切り記号としてファイル区切り記号を指定することで、大きなファイルをより小さなファイルに分割できます。 区切り記号は保持され (破棄されません)、各ファイル セクションの最後の項目になります。
区切り記号 は、FileSystem プロバイダーが Get-Content
コマンドレットに追加する動的パラメーターです。 このパラメーターは、ファイル システム ドライブでのみ機能します。
手記
現在、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 パラメーターを使用すると、登録済みのコード ページ (-Encoding 1251
など) の数値 ID や、登録されたコード ページの文字列名 (-Encoding "windows-1251"
など) も使用できます。 詳細については、Encoding.CodePageの .NET ドキュメントを参照してください。
PowerShell 7.4 以降では、Ansi
パラメーターの 値を使用して、手動で指定しなくても、現在のカルチャの ANSI コード ページの数値 ID を渡すことができます。
手記
UTF-7 および* の使用は推奨されなくなりました。 PowerShell 7.1 の時点で、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
手記
このパラメーターは 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 +押すと、待機 を中断できます。 ファイルを削除すると、終了しないエラーが発生し、待機も中断されます。
待機 は、FileSystem プロバイダーが Get-Content
コマンドレットに追加する動的パラメーターです。 このパラメーターは、ファイル システム ドライブでのみ機能します。
Wait をRaw と組み合わせることはできません。
型: | SwitchParameter |
配置: | Named |
規定値: | False |
必須: | False |
パイプライン入力を受け取る: | False |
ワイルドカード文字を受け取る: | False |
入力
このコマンドレットには、読み取りカウントまたは合計カウントをパイプできます。
String[]
このコマンドレットにパスをパイプできます。
資格情報をこのコマンドレットにパイプできます。
出力
AsByteStream パラメーターを使用すると、このコマンドレットはコンテンツをバイトとして返します。
既定では、このコマンドレットは、1 行に 1 つずつ、文字列の配列としてコンテンツを返します。 Raw パラメーターを使用すると、ファイル内のすべての行を含む 1 つの文字列が返されます。
メモ
PowerShell には、Get-Content
の次のエイリアスが含まれています。
- すべてのプラットフォーム:
gc
type
- ウィンドウズ:
cat
Get-Content
コマンドレットは、任意のプロバイダーによって公開されるデータを操作するように設計されています。 セッションでプロバイダーを取得するには、Get-PSProvider
コマンドレットを使用します。 詳細については、about_Providersを参照してください。
関連リンク
PowerShell