PowerShellを使って通信機器等と戯れていると、
「あれ?あのときどんなコマンド打ったんだっけ?」
「ちゃんと手順書通り実行したぞ。でも証跡がないと不安。」
そんなとき、画面コピーをとるなんて前近代的なことはしたくない!
というか、手作業でいちいち記録に残すのは面倒!
そんなときは、PowerShellの便利コマンドレットの「Start-Transcript/Stop-Transcript」を使うととっても便利。
個人的に便利だと思う点
自分の好きなタイミングでログを取ることができる
ログを取るタイミングを自分で始められるのは地味に便利。
ログを開始するときは
Start-Transcript
終了するときは
Stop-Transcript
で終了することができます。
「とりあえず、どんなログも残しておきたい・・・」
なんて人は、PowerShellのprofileを使えばStart-Transcriptを仕込むことで、自動でログを残すことも可能です。
プロファイルについては↓
ファイル名が一意になるよう、よしなに設定してくれる!
痒い所に手が届く仕様ですね。
Start-Transcript
トランスクリプトが開始されました。出力ファイル: C:\PowerShell_transcript.<<PC名>>.yUcdGATx.20210209133530.txt
私の環境では、「PowerShell_transcript.<<PC名>>.<<適当な文字列>>.yyyyMMddhhmmss.txt」という形式でファイルが作成されました。
これでログファイルが意図せず上書きされた!!なんてことがなくなってみんな幸せです。
実行環境まで含めてファイルに出力してくれる!
********************** Windows PowerShell トランスクリプト開始 開始時刻: 20210209122845 ユーザー名: xxxxx RunAs ユーザー: xxxxx 構成名: コンピューター: xxxx (Microsoft Windows NT 10xxxxx) ホスト アプリケーション: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe プロセス ID: 18812 PSVersion: xxxx PSEdition: Desktop PSCompatibleVersions: xxx BuildVersion: xxxx CLRVersion: xxxx WSManStackVersion: xxx PSRemotingProtocolVersion: xxx SerializationVersion: xxxxx **********************
どのPCで、どのユーザーで、PowerShellのVersionがこれで・・・
と、後で欲しくなりそうな情報を付加してくれるところがいぶし銀です。
その他、便利(?)なパラメータ
-append
既存のログファイルに追記することができます。
-OutputDirectory
ログファイルを保存するフォルダを指定することができます。
-IncludeInvocationHeader
このパラメタを指定すると、ログファイルにコマンド開始時のタイムスタンプが付与されます。
********************** コマンド開始時刻: 20210209134637 ********************** PS C:> Stop-Transcript **********************
証跡を残すのに、これでもかというくらい付与して、上長に提出してやるといい感じですね。
まぁ所詮テキストファイルなので偽装は可能ですが。
-NoClobber
出力先に指定したファイルが既に存在した場合、上書きをせずに、エラーとするパラメータ。
既に存在するファイルを指定してStart-Transcript -noclobberで実行すると・・・
「ファイル~は既に存在しますが、NoClobber が指定されました。」
と出てエラーとなります。
Start-Transcript : ファイル C:\ログ.txtは既に存在しますが、NoClobber が指定されました。 発生場所 行:1 文字:1 + Start-Transcript -Path 'C:\Users\Documents\PowerShell_transcr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo: ResourceExists: (C:\Users\...10209133530.txt:String) [Start-Transcript], Unautho rizedAccessException + FullyQualifiedErrorId : NoClobber,Microsoft.PowerShell.Commands.StartTranscriptCommand
NoClobberが指定されましたってなんでそこだけ英語なんだ・・・。
ちなみにClobberとは上書きするという意味だそうです。
他のプログラム(cmdやOpenSSHなど)が出力されない問題
大変便利なStart-Transcriptですが、ひとつ困った問題が。
他のプログラムを実行した結果がログに残らない・・・。
これが大事なのに。
この問題、Out-Defaultコマンドにパイプすることで回避できます。
ssh 192.168.1.1|Out-Default
sshはOpenSSHのコマンドです。
外部プログラムの出力はデフォルトだと標準出力に出ないということでしょうか。
コンソールで見ていると同じように見えますが。
細かいことはわかりませんが、色々あるのでしょう・・・。
終わりに
個人的に好きなコマンドのひとつ、Start-Transcript/Stop-Transcript。
だっていぶし銀じゃないですか。便利だし。
ただし、-NoClobberのエラーだけは直してください。
以上、ここまでお読みいただき、ありがとうございました。