自動化により、テキストファイルからデータを読み取ることは一般的なシナリオです。ほとんどのプログラミング言語には、テキストファイルを読み取る方法が少なくとも1つあり、PowerShellも例外ではありません。PowerShellのGet-Content
コマンドレットは、PowerShellのtailに相当し、テキストファイルの内容を読み取り、データをPowerShellセッションにインポートします。
PowerShellのGet-Content
コマンドレットは、スクリプトでテキストファイルを入力として使用する必要がある場合に欠かせないツールです。たとえば、PowerShellスクリプトが監視するコンピュータリストを読み取る必要があるか、ユーザーに送信するメールテンプレートをインポートする必要がある場合など、PowerShell Get-Content
はこれらのシナリオを簡単にサポートします!
リアルタイムでログファイルをフォローするのはどうですか?はい、PowerShell Get-Content
もそれができます!この記事を読み続けると、PowerShellでGet-Content
コマンドレットを使用してテキストファイルを読み取る方法を学ぶことができます。
前提条件
このチュートリアルの例に従うことに興味がある場合は、次の要件が必要です。
- Windows 10が実行されているコンピュータが必要です。このチュートリアルでは、Windows 10バージョン20H2を使用します。しかし、お持ちのWindows 10バージョンでも大丈夫です。
- コンピュータには、少なくともWindows PowerShell 5.1、またはPowerShell 7.1がインストールされている必要があります。ここではPowerShell 7.1を使用していますが、どちらのバージョンも機能します!
- あなたはコマンドを書いてテストする必要があるので、コードエディタが必要です。推奨されるエディタは、Windowsに組み込まれているWindows PowerShell ISEと、Visual Studio Code(VSCode)です。この記事ではVSCodeを使用します。
- また、コンピューター上に作業ディレクトリを作成すると役立ちます。作業フォルダはどこにでも作成できます。ただし、このチュートリアルの例はC:\demoフォルダにあることに注意してください。
- まずはじめに、コンテンツが必要です!作業ディレクトリに、fruits.txtという名前のファイルを作成し、シンプルな果物を10個含めます。このテキストファイルをすべての例で使用します。
どのPowerShellバージョンをお持ちかわかりませんか?記事PowerShellバージョンを確認する方法(すべての方法を紹介!)をご覧ください。
テキストファイルを読み取り、結果を文字列配列として返す
Get-Content
コマンドレットは、ファイルからコンテンツを読み取り、デフォルトではテキストファイルの各行を文字列オブジェクトとして返します。その結果、PowerShellオブジェクトのコレクションが文字列オブジェクトの配列になります。
以下のコードはfruits.txtファイルの内容を読み取り、以下のスクリーンショットで見られるようにPowerShellコンソールに結果を表示します。

Get-Content
.Get-Content
はコンテンツを配列として読み取り、保存しますが、それが確かであることをどのように知ればよいですか?まず、コンテンツをPowerShellオブジェクトに保存し、その後、タイプを確認できます。
スクリーンショットを見ると、$fruits
変数は 10 個のオブジェクトを含む配列です。各オブジェクトは 1 行のテキストを表します。

テキストファイルから特定の行を返す
前の例では、デフォルトの Get-Content
の結果が配列またはオブジェクトのコレクションであることを学びました。コレクション内の各アイテムはインデックス番号に対応し、PowerShell のインデックスは通常ゼロから始まります。
以下のスクリーンショットでは、文字列配列に 10 個のアイテムがあることが示されています。配列はゼロから 9 までのインデックスで 10 個のアイテムをインデックス化しました。

コンテンツの 5 番目の行のみを表示するには、インデックス番号 4
を指定する必要があります。これは、角括弧で囲まれたインデックス番号(配列表記として知られる)です。
Get-Content
コマンドが括弧で囲まれていることに気付くかもしれません。この表記法は、PowerShell に対して括弧で囲まれたコマンドを他の操作よりも先に実行するよう指示します。
以下のスクリーンショットでは、返される結果が raspberry
であることがわかります。これはインデックス 4
の項目であり、テキストファイルの 5 番目の行に対応しています。

Get-Content
results.最後の行のコンテンツを取得する必要がある場合はどうなるでしょうか?幸いなことに、行の合計数を知る必要はありません。代わりに、インデックスとして [-1]
を使用し、Get-Content
はファイルの最後の行のみを表示します。
Get-Content
によって返されるトップの結果の数を制限します
TotalCount
パラメーターを使用して、テキストファイルから指定された行数を取得します。 TotalCount
パラメーターは、long値を受け入れます。最大値は9,223,372,036,854,775,807。
たとえば、以下のコマンドはコンテンツを読み取り、結果を3つのアイテムに制限します。
予想通り、以下の結果はテキストファイルの先頭から上位3行のみを表示します。

Get-Content
command and the TotalCount
parameter.PowerShellのTailパラメーターを使用してファイルの末尾から結果を返す
前述の例では、PowerShell Get-Content
コマンドレットを使用してテキストファイルを読み取り、上位の結果を制限しました。 PowerShell Get-Content
を使用して逆を達成することも可能です。 PowerShell Tail
パラメーターを使用してファイルの末尾から指定された行数を読み取ります。
以下のコード例では、テキストファイルを読み取り、最後の4行の内容を表示します。
PowerShell tail
コマンドを実行した後、期待される結果はコンテンツの最後の4行に制限されます。次に示す画像のようになります。

Get-Content
Tail
parameter.Tail
パラメーターは、Wait
パラメーターと一緒によく使用されます。 Wait
パラメーターを使用すると、ファイルが開かれ、1秒ごとに新しいコンテンツをチェックします。以下のデモンストレーションは、Tail
およびWait
パラメーターを活用しています。 Wait
を終了するには、CTRL+C
のキーコンビネーションを使用します。

wait
and Tail
parameters with Get-Content
.結果を単一の文字列として返す
以前の例で気付いたかもしれませんが、PowerShellのGet-Content
出力では文字列配列を扱っています。そして、これまで学んだように、配列の性質により、コンテンツを1つずつ操作することができます。
配列はしばしばうまく機能しますが、文字列の置換がより困難になる場合があります。Get-Content
のRaw
パラメータは、ファイルの全コンテンツを単一の文字列オブジェクトとして読み取ります。以下のコードは最初の例で使用したものと同じですが、Raw
パラメータはファイルのコンテンツを単一の文字列として保存します。
以下のスクリーンショットは、Raw
パラメータをGet-Content
に追加することで、コンテンツを配列のオブジェクトではなく単一の文字列として処理することを示しています。

Raw
parameter of Get-Content
reads the file content as a single string object.Raw
パラメータを使用してファイルの内容を単一の文字列に取得したら、それをどのように利用できるでしょうか?おそらく、そのファイルのコンテンツ内の文字列を検索して置換する必要があります。以下の例では、Get-Content
がファイルのコンテンツを単一の文字列として読み取ります。そして、replace
演算子を使用して、特定の単語を別の単語に置換します。
関連記事: 文字列の検索と置換

replace
operator.フィルターと一致するファイルからのみコンテンツを読み取る
ファイルがいっぱいのフォルダーを持っていますが、選択されたもののコンテンツのみを読み取る必要がありますか? PowerShell を使用すると、 Get-Content
でファイルを個別にフィルタリングする必要はありません。 Get-Content
の Filter
パラメーターは、コマンドレットが読み取るファイルを制限します。
特定のファイルのコンテンツのみを読み取ることを示すために、まず読み取るためのいくつかのファイルを作成します。以下に示すように、Add-Content
を使用して作業フォルダーにファイルを作成します。

.log
files using Add-Content
. テストファイルを作成したら、Filter
および Path
パラメーターを使用してルートディレクトリ内の .log
ファイルのみを読み取ります。フィルター定義で使用されるアスタリスクは、.log
で終わる任意のファイルを Get-Content
が読み取ることを示します。パスパラメーターの終わりのアスタリスクは、ファイルの読み取りをルートディレクトリのみに制限します。
以下の出力のように、.log
ファイルからのコンテンツのみが表示されます。

Filter
parameter with PowerShell Get-Content
to limit the read files.関連記事:Get-ChildItem: ファイル、レジストリ、証明書などを1つにリストアップする
ファイルの代替データストリームを読む
これまではテキストファイルのみを扱ってきましたが、Get-Content
はファイルの代替データストリーム(ADS)からデータを読み取ることができます。ストリームを別の通常のファイル内容と一緒に格納されている別のデータ属性と考えることができます。
代替データストリームはWindows NTFSファイルシステムの機能であり、したがってこれは非Windowsオペレーティングシステムと使用した場合には
Get-Content
には適用されません。
Stream
パラメータを使用してファイルを参照すると、Get-Item
は以下に示すようにStream
という名前のプロパティを返します。このデフォルトのファイルコンテンツストリームは:$DATA
で表されます。
デフォルトの:$DATA
ストリームを示すために、Get-Item
コマンドレットを使用してファイルfruits.txtで利用可能なすべてのストリームを表示します。以下に示すように、Get-Item
は単一のストリームを表示します。

Get-Item
.Get-Content
のStream
パラメータはデフォルトの:$DATA
ストリームのコンテンツを明示的に読み取ります。返されるコンテンツはデフォルトのGet-Content
出力と同じであり、:$DATA
ストリームはデフォルトで読み取られます。

:$DATA
stream using Get-Content
.Get-Content
を使用して代替データストリームを取得する方法を示すために、Add-Content
を使用してファイルを変更し、新しいストリームを追加します。新しいストリームをデフォルトの:$DATA
ストリームと並べて表示するには、Get-Item
を使用します。以下の例に示すように。

デフォルトでは:$DATA
ストリームのみが読み取られるため、Get-Content
のStream
パラメータを使用して新しいSecret
ストリームの内容を取得します。以下のように、デフォルトのファイル内容の代わりにSecret
ストリームの内容が表示されます。

Get-Content
to read the Secret
alternate data stream content.PowerShellの次のステップ Get-Content
この記事では、Get-Content
を使用してコンテンツを読み取り、操作する多くの方法を学びました。さらに、Get-Content
は代替データストリームからコンテンツを読み取る柔軟性があることを学びました!
この記事で学んだことを活用して、Get-Content
をどのように活用できるか。バックアップファイルが古くなっていないかどうかを確認し、バックアップジョブを自動的に実行する呼び出しをトリガーするためにGet-Content
を使用できるかもしれませんか?
Source:
https://adamtheautomator.com/powershell-get-content/