【PowerShell】Get-Contentで更新されていくログファイルをPowerShellウィンドウに表示して監視する方法

なんかいい方法ねーのかなーー!?!?

山田かねすけ
山田かねすけ
けいぞう
けいぞう

どうしたの?

俺が作ったプログラムをテストしてるんだけど
そいつのログファイルを開いて見たいんだよな。

だけど、そいつが1秒に1回ぺースで書き込みするからさ
開いちゃうと書き込みエラーになっちまうんだよ。
「開かれてるので書き込みできません」って。

コピーして開けばいんじゃない?

それでもいんだけどよお。。
なんかもっと賢いやり方ねえのかなあと思ってさあ!

PowerShellのGet-Contentでファイルの中身が見れるよ。しかもプロパティを付ければ自動で更新してくれるから、リアルタイム監視できるんだ。

そうなのか!!
詳しく教えてくれよおおーーー!!!

Get-Contentでログファイルをリアルタイム監視する方法

以下のコマンドで実現可能です。

>Get-Content -Path “C:\work\TestScript\log.txt” -Tail 10 -Wait


Get-Contentはファイルを開いて中身を表示するコマンドレットです。

UNIX系だと「cat」と同じですね。

これに「-Wait」を付けると、ファイルに追記がされたタイミングでPowerShellの画面も更新してくれるので、リアルタイム監視ができるという訳です。

「-Tail」は、最初表示するときに、そのファイルの下から何番目を表示するかを指定するためのプロパティです。

具体例

例えば、以下のようなコマンドレットを実行しているとしましょう。

While($true){
    (Get-Date).ToString("yyyy/MM/dd/HH:mm:ss") | Out-File "C:\work\TestScript\log.txt" -Append
    sleep -Seconds 1
}

「 C:\work\TestScript\log.txt 」に対して、1秒ごとに”yyyy/MM/dd/HH:mm:ss”形式で日時を追記していきます。

このファイルを直接開くと1秒後には書き込みエラーになってしまいますが(読み取り専用で開く必要がある)、先ほどのGet-Contentコマンドレットであれば、中身をのぞくことができます。

⇩このような形になります⇩


なるほどなーー!
Waitをつけることでファイルに追記されても常に更新してくれるってわけか!いいなこれ!!

本当はログ出力するプログラム側でテキストを読み取り専用でしか開けないように制御するべきなんだけどね。

それができない場合は、この方法で中身を見ることができるよ。