PowerShellでファイルをリアルタイム監視する方法【tail -f相当を実現】

PowerShellのアイキャッチ

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相当の動作を実現する基本構文は以下の通りです。

PowerShell
Get-Content -Path 【ファイルパス】 -Tail 【末尾行数】 -Encoding 【文字コード】 -Wait

このコマンドを実行すると、指定したファイルの末尾から指定行数を表示したあとファイルへの追記を監視し続けます。各オプションを詳しく見ていきましょう。

各オプションの詳しい解説

-Path 【ファイルパス】

監視したいファイルのパスを指定します。パスにスペースが含まれる場合はダブルクォーテーション("")で囲む必要があります。

PowerShell
Get-Content -Path "C:\logs\app.log" -Wait

なお、エクスプローラーで開いているフォルダをカレントディレクトリとしてPowerShellを起動する方法は、こちらの記事で紹介しています。

-Tail 【末尾行数】

コマンド実行時点でどこから表示を開始するかを行数で指定します。

  • 10を指定すると、ファイルの末尾10行を表示してから監視を開始します。
  • 0を指定すると、実行時点では何も出力されず -Wait と併用することで以降の追記分だけが表示されます。
PowerShell
# 末尾10行を表示してから監視を開始
Get-Content -Path "C:\logs\app.log" -Tail 10 -Wait

# 実行時点では何も表示せず、以降の追記のみを監視
Get-Content -Path "C:\logs\app.log" -Tail 0 -Wait

-Encoding 【文字コード】

ファイルの文字コードを指定します。日本語を含むログファイルではこのオプションを正しく指定しないと文字化けが発生することがあります。

主な指定値は以下の通りです。

指定値説明
utf8UTF-8(BOM付き)
utf8NoBOMUTF-8(BOMなし)
utf8BOMUTF-8(BOM付き、明示的に指定)
shift_jisShift-JIS(古いシステムのログでよく使われる)

デフォルトではutf8NoBOMが使用されますが、環境によっては文字化けが発生することがあります。その場合は明示的に-Encoding utf8を指定してみてください。

⚠️ PowerShell 5.1の場合
tf8NoBOMというデフォルト値はPowerShell 6.0以降の仕様です。Windowsに標準搭載されているPowerShell 5.1ではデフォルトの文字コードが異なりエンコーディング関連で意図しない挙動が起きやすいため、PowerShell 7.x へのアップグレードをおすすめします。

📎 PowerShell 5.1を7.xに更新する方法【winget・MSI対応】

指定できる文字コードの全リストはMicrosoft公式ドキュメントをご参照ください。

Get-Content (Microsoft.PowerShell.Management) – PowerShell | Microsoft Learn

PowerShell
# 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サーバーのアクセスログを監視

PowerShell
Get-Content -Path "C:\inetpub\logs\LogFiles\W3SVC1\u_ex250119.log" -Tail 20 -Encoding utf8 -Wait

末尾20行を表示してから、以降のアクセスをリアルタイムで追跡できます。

ケース2: アプリケーションのエラーログを監視(新規追記のみ)

PowerShell
Get-Content -Path "D:\app\logs\error.log" -Tail 0 -Encoding utf8 -Wait

実行時点では何も表示せず、以降に発生したエラーだけを表示します。

ケース3: パスにスペースが含まれるファイルを監視

PowerShell
Get-Content -Path "C:\Program Files\MyApp\logs\debug.log" -Tail 10 -Encoding utf8 -Wait

パスにスペースが含まれる場合は必ずダブルクォーテーションで囲んでください。

ケース4: 特定キーワードのログだけを抽出する(応用)

Get-ContentSelect-Stringとパイプで組み合わせることができます。エラーログが多く必要な行だけを絞り込みたいときに便利ですよね。

PowerShell
Get-Content -Path "C:\logs\app.log" -Tail 0 -Encoding utf8 -Wait | Select-String -Pattern "ERROR"

"ERROR"の部分を変えれば特定のキーワードにマッチした行だけをリアルタイム表示できます。WARNや特定のIPアドレスなど、用途に合わせて活用してみてください。

Q&A

コマンドプロンプト(cmd.exe)では同じことができないの?

残念ながらコマンドプロンプトにはtail -f相当の標準コマンドがありません。PowerShellを使用することで実現できます。

複数のファイルを同時に監視できる?

Get-Contentは1つのファイルパスしか指定できません。複数ファイルを同時に監視したい場合はPowerShellのウィンドウを複数開くか「Tail for Windows」「Baretail」などのログ統合ツールを使う方法があります。

ファイルが大きすぎて表示が遅い場合は?

-Tail 0を指定すれば初回は何も読み込まず追記分だけを監視するため、非常に大きなファイルでも快適に使えます。

文字化けが発生する場合の対処法は?

-Encodingオプションでファイルの文字コードを正しく指定してください。UTF-8の場合は-Encoding utf8、Shift-JISの場合は-Encoding shift_jisを試してみてください。PowerShell 5.1をお使いの場合は7.xへのアップグレードも検討してみてください。

リアルタイム監視の更新頻度はどのくらい?

-Waitオプションは約1秒間隔でファイルの変更をチェックしています。厳密なリアルタイム性が求められる用途では、FileSystemWatcherを使ったスクリプトを組む方法もあります。

PowerShellでポート疎通確認を行う方法も別記事で解説しています。

まとめ

この記事ではPowerShellのGet-Contentコマンドレットを使って、Windowsでファイルの変更をリアルタイムに監視する方法を解説しました。

  • WindowsでLinuxのtail -f相当の機能はGet-Content -Waitで実現できるよ。
  • -Tailオプションで初回表示する行数を制御できるよ。
  • -Encodingオプションで文字コードを指定すれば文字化けを防げるよ。
  • Select-Stringとパイプで組み合わせれば特定キーワードだけ抽出できるよ。
  • PowerShell 5.1をお使いの場合は7.xへのアップグレードをおすすめするよ。

ログファイルの監視は開発・運用の現場で頻繁に行う作業です。このコマンドを覚えておくと作業効率が格段に上がります。ぜひ試してみてくださいね。

PowerShellでできることはログ監視だけではありません。よく使うコマンドを一覧にしたまとめ記事も合わせてご覧ください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次