PowerShellでまとまった処理を実行する場合、実行ログを残したいことがある。そんなときに便利なのが、「start-transcript」〜「stop-transcript」。この間に記述されたPowerShellのコマンドレットの実行結果(標準出力)がログファイルとして出力される。
start-transcript;
# 処理を記述
stop-transcript;
ファイル名や出力先の指定、ファイルの上書き可否などもオプションで設定できる。
オプションを指定しなかった場合はユーザーのドキュメントフォルダに「PowerShell_transcript.ハッシュ値とタイムスタンプ.log」といった名前でログが出力される。
出力されるログファイルを確認すると、実行したタイムスタンプやユーザーも記録されており、これ一本で随分といい感じのログ出力処理が完成する。
注意点
結果が出力されるのはあくまで「PowerShellコマンドレット」の「結果」だけという点に注意してほしい。
実際のログでは「何の処理を実行したか」や、「DOSコマンドや.NETオブジェクトの処理結果」も記録したいと思うので、下記実装例を足がかりにしてもらえたら良い。
start-transcript;
# 標準出力だけでは何の処理結果か読み取れないため、このようにコメントも出力するとわかりやすい
Write-Output "フォルダ作成 start..." | Out-Default;
# New-Itemコマンドレットでフォルダを作成した結果は自動で出力される
New-Item .\hoge
# DOSコマンドなどを実行する際はOut-Defaultで明示的に結果を出力する必要がある
# この場合はすでNew-Itemでhogeフォルダを作成済なのでエラーが出力される
mkdir .\hoge | Out-Default;
# .NETオブジェクトの処理結果も同様にOut-Defaultが必要となる
$hogeObject = New-Object System.Hoge;
$hogeObject.Value = "ほげほげ";
Write-Output $hogeObject.Value | Out-Default;
stop-transcript;
これはあくまでサンプルです。
あとはそれぞれの用途に応じて効率的に記述してください。