Windowsでログファイルの更新をリアルタイムで追いかけたいことがありますよね。LinuxやmacOSではtail -fコマンドが当たり前のように使えるのに、Windowsのコマンドプロンプトにはそれに相当する標準コマンドがありません。開発や運用の現場でログ監視をしたいとき、地味に困ってしまいます。
でも大丈夫です。PowerShellのGet-Contentコマンドレットを使えばtail -fとほぼ同じことができるようになります。この記事ではオプションの使い方から実践的な使用例まで、初心者の方にも分かりやすく解説します。
この記事でわかること
Get-Content -Waitでリアルタイムログ監視を実現する方法-Tail・-Encodingなど各オプションの使い方と使い分け- WebサーバーログやアプリログをWindowsで監視する実践例
- 特定キーワードのみ抽出するフィルタリング応用技
Windowsで「tail -f」相当の機能が必要になる場面
以下のような場面では、ファイルへの追記をリアルタイムで確認できると便利ですよね。
- Webサーバーのアクセスログ・エラーログの監視
- アプリケーションの動作確認やデバッグ時のログ追跡
- バッチ処理の進捗を記録したログファイルの監視
- データベースのクエリログ・スロークエリの確認
LinuxやmacOSではtail -fでサクッと実現できるこの機能。Windows環境でも同じことができたら……という願いは、PowerShellのGet-Contentコマンドレットで解決できます。
ローカルにデータベース環境を手軽に用意したい方には、こちらの記事も参考になります。

PowerShellの「Get-Content」コマンドレットとは
Get-ContentはPowerShellに標準搭載されているコマンドレットで、ファイルの内容を読み取るための基本ツールです。単にファイルの中身を表示するだけでなく-Waitオプションを組み合わせることで、ファイルへの追記をリアルタイムで監視し続けることができます。
詳細はMicrosoft公式ドキュメントもご参照ください。
Get-Content (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn
基本的なコマンド構文
PowerShellでtail -f相当の動作を実現する基本構文は以下の通りです。
Get-Content -Path 【ファイルパス】 -Tail 【末尾行数】 -Encoding 【文字コード】 -Waitこのコマンドを実行すると、指定したファイルの末尾から指定行数を表示したあとファイルへの追記を監視し続けます。各オプションを詳しく見ていきましょう。
各オプションの詳しい解説
-Path 【ファイルパス】
監視したいファイルのパスを指定します。パスにスペースが含まれる場合はダブルクォーテーション("")で囲む必要があります。
Get-Content -Path "C:\logs\app.log" -Waitなお、エクスプローラーで開いているフォルダをカレントディレクトリとしてPowerShellを起動する方法は、こちらの記事で紹介しています。

-Tail 【末尾行数】
コマンド実行時点でどこから表示を開始するかを行数で指定します。
10を指定すると、ファイルの末尾10行を表示してから監視を開始します。0を指定すると、実行時点では何も出力されず-Waitと併用することで以降の追記分だけが表示されます。
# 末尾10行を表示してから監視を開始
Get-Content -Path "C:\logs\app.log" -Tail 10 -Wait
# 実行時点では何も表示せず、以降の追記のみを監視
Get-Content -Path "C:\logs\app.log" -Tail 0 -Wait-Encoding 【文字コード】
ファイルの文字コードを指定します。日本語を含むログファイルではこのオプションを正しく指定しないと文字化けが発生することがあります。
主な指定値は以下の通りです。
| 指定値 | 説明 |
|---|---|
utf8 | UTF-8(BOM付き) |
utf8NoBOM | UTF-8(BOMなし) |
utf8BOM | UTF-8(BOM付き、明示的に指定) |
shift_jis | Shift-JIS(古いシステムのログでよく使われる) |
デフォルトではutf8NoBOMが使用されますが、環境によっては文字化けが発生することがあります。その場合は明示的に-Encoding utf8を指定してみてください。
⚠️ PowerShell 5.1の場合
tf8NoBOMというデフォルト値はPowerShell 6.0以降の仕様です。Windowsに標準搭載されているPowerShell 5.1ではデフォルトの文字コードが異なりエンコーディング関連で意図しない挙動が起きやすいため、PowerShell 7.x へのアップグレードをおすすめします。

指定できる文字コードの全リストはMicrosoft公式ドキュメントをご参照ください。
Get-Content (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn
# UTF-8のログファイルを監視
Get-Content -Path "C:\logs\app.log" -Encoding utf8 -Wait
# Shift-JISのファイルを監視
Get-Content -Path "C:\logs\legacy.log" -Encoding shift_jis -Wait-Wait(リアルタイム監視の要)
今回の記事の本題となる重要なオプションです。Linuxのtail -fに相当します。
このオプションを指定するとコマンド実行後に待機状態となり、ファイルに追記された内容がほぼリアルタイム(約1秒ごとにチェック)で出力されます。監視を停止したい場合はCtrl + Cで中断できます。
実践的な使用例
ケース1: Webサーバーのアクセスログを監視
Get-Content -Path "C:\inetpub\logs\LogFiles\W3SVC1\u_ex250119.log" -Tail 20 -Encoding utf8 -Wait末尾20行を表示してから、以降のアクセスをリアルタイムで追跡できます。
ケース2: アプリケーションのエラーログを監視(新規追記のみ)
Get-Content -Path "D:\app\logs\error.log" -Tail 0 -Encoding utf8 -Wait実行時点では何も表示せず、以降に発生したエラーだけを表示します。
ケース3: パスにスペースが含まれるファイルを監視
Get-Content -Path "C:\Program Files\MyApp\logs\debug.log" -Tail 10 -Encoding utf8 -Waitパスにスペースが含まれる場合は必ずダブルクォーテーションで囲んでください。
ケース4: 特定キーワードのログだけを抽出する(応用)
Get-ContentはSelect-Stringとパイプで組み合わせることができます。エラーログが多く必要な行だけを絞り込みたいときに便利ですよね。
Get-Content -Path "C:\logs\app.log" -Tail 0 -Encoding utf8 -Wait | Select-String -Pattern "ERROR""ERROR"の部分を変えれば特定のキーワードにマッチした行だけをリアルタイム表示できます。WARNや特定のIPアドレスなど、用途に合わせて活用してみてください。
Q&A
PowerShellでポート疎通確認を行う方法も別記事で解説しています。

まとめ
この記事ではPowerShellのGet-Contentコマンドレットを使って、Windowsでファイルの変更をリアルタイムに監視する方法を解説しました。
- WindowsでLinuxの
tail -f相当の機能はGet-Content -Waitで実現できるよ。 -Tailオプションで初回表示する行数を制御できるよ。-Encodingオプションで文字コードを指定すれば文字化けを防げるよ。Select-Stringとパイプで組み合わせれば特定キーワードだけ抽出できるよ。- PowerShell 5.1をお使いの場合は7.xへのアップグレードをおすすめするよ。
ログファイルの監視は開発・運用の現場で頻繁に行う作業です。このコマンドを覚えておくと作業効率が格段に上がります。ぜひ試してみてくださいね。
PowerShellでできることはログ監視だけではありません。よく使うコマンドを一覧にしたまとめ記事も合わせてご覧ください。




