続々・PowerShellを触ろう~まだログ出力について調べる

PowerShellで実行ログを記録するにはtranscriptを使用すればよさそう、的なことを以前書きましたが、これはPowerShell2.0環境での話。
今回の作業対象は、おそらくバージョン5.0になると思うので、こちらで記載されていることが該当しそうな気がする。

PowerShell5.0以降ではグループポリシーで設定するころで解決します。
グループポリシー [ユーザーの構成>管理用テンプレート>Windows PowerShell]を開きます。
PowerShell トランスクリプションを有効にする」を開き「有効」変更します。
また、出力先を入力します。

Start-Transcriptを実行する前に、この「PowerShell トランスクリプションを有効にする」コマンドを実行させないとダメかもしれません。
これはGUIで難なく操作できそうだけど、これもめんどくさがられそうな気がするので、コマンドラインにて実行できないかを調査。
こちらを確認。
えーと、レジストリキーの情報があるけど、ここに載っているパスはバージョン2.0には載っていなかった。
なんかもうめんどくさくなったので、PowerShell5.1にバージョンアップして確認してみる…が、ない。
…やめよう。あきらめよう。Windows7環境では確認は無理、ということにしておこう。

Set-PSDebug

ここを見て、Set-PSDebugの存在を知る。
というわけで、こちらの記事を参考にし、以下のコマンドレットを追加。

#各処理における実行コマンドを表示
Set-PSDebug -Trace 1

記述位置は、Start-Transcriptを実行した後。
実行後、Powershellのウインドウには以下の通り表示される。
DEBUG部分は黒地に黄色文字という阪神カラーだった。

PS C:\Users\bladecatcher> C:\Users\bladecatcher\Desktop\TestScript.ps1
フォルダが存在しているため、フォルダ作成処理をスキップしました。
Transcript started, output file is C:\tmp\20190226_164721_bladecatcher-PC.txt
2019/02/26 16:47:21: 実行開始
DEBUG: 28+ >>>> echo "Hello world"
Hello world
DEBUG: 30+ >>>> Start-Sleep -s 5
DEBUG: 33+ >>>> echo "Hello and Goodbye"
Hello and Goodbye
DEBUG: 35+ >>>> Start-Sleep -s 3
DEBUG: 38+ >>>> Write-output "${EXEDATE}: 実行終了"
2019/02/26 16:47:21: 実行終了
DEBUG: 41+ >>>> Stop-transcript
Transcript stopped, output file is C:\tmp\20190226_164721_bladecatcher.txt
DEBUG: 45+ >>>> Read-Host "続けるには Enter キーを押してください..."
続けるには Enter キーを押してください...: #各処理における実行コマンドを表示
#各処理における実行コマンドを表示
PS C:\Users\bladecatcher>

ウインドウには実行コマンドが表示された。sleepまで表示するのはダサいがしょうがないね。
尚、上記スクリプトを実行した時はスクリプトから記述を漏らしていたが、
処理が終わったらSet-PSDebugはオフにしないと、延々と実行コマンドを表示し続ける(と思う)ので、切っておく。

PS C:\Users\bladecatcher> Set-PSDebug -Off
DEBUG: 1+ >>>> Set-PSDebug -Off

今回は書き漏れなので手動で終わらせたが、スクリプトの最後にでも書いておくといいんじゃないかな。

そして、transcriptで取得したログの中身を確認する。

*********************

Transcript started, output file is C:\tmp\20190226_164721_bladecatcher-PC.txt
2019/02/26 16:47:21: 実行開始
Hello world
Hello and Goodbye
2019/02/26 16:47:21: 実行終了

*********************

Windows PowerShell transcript end
End time: 20190226164730

*********************

出力されなかった・・・
どうやらマイクロソフト的なバグらしい。
https://blogs.technet.microsoft.com/askcorejp/2017/05/15/start-transcriptcmdletlog/
原因が分かったとか、問題を解消したとか、そういう情報が見つけられなかったんだけど、これってバグったままなんだろうか…
やっぱログ出力をコマンドレットだけで解決しようってのは限界があるのかしら?