今回も前回に続きPowerShell v5をコアとするWindows Management Framework 5.0 Preview September 2014 (v5.0) の機能詳細を触りつつ、何が変わるのかメモです。
今回から、WMF 5.0のリリースノート機能詳細を見ていきます。
- Audit Windows PowerShell usage by transcription and logging
このTranscriptですが、結論からいうとPowerShell ISEをはじめとするホストプログラムでも、Transcriptが扱えるようになります。
つまり、Visual Studioでも使えるのです。やったー!
- 過去の記事はこちら
Transcript とは
「PowerShell.exeを使っていて、すべての自分の操作ログを残したい」そう思った時にどうするか? Transcript の出番です。
Transcriptは、PowerShellの全操作をPowerShell.exeに表示されたそのまま自動的にログ保存してくれます。
まさにさくっと自動化にとって便利ないい子です。
しかしTranscriptには制限がありました。 PowerShell ISEで利用できなかったのです。これが、PowerShell v5では変わります。
そう、PowerShell v5なら「PowerShell v5でTranscript」が実行できるようになります。
PowerShell 4.0 まで
Transcriptを開始するにはPowerShell.exeで次のCmdletを実行しました。
PS> Start-Transcript トランスクリプトが開始されました。出力ファイル: C:\Users\Administrator\Documents\PowerShell_transcript.20140908044205.txt
パスを付けることで、保存先を指定も可能です。
PS C:\Users\Administrator> "hoge" hoge PS C:\Users\Administrator> "fuga" fuga
終了するには、次のCmdletを入力します。
PS> Stop-Transcript トランスクリプトが停止されました。出力ファイル: C:\Users\Administrator\Documents\PowerShell_transcript.20140908044205.txt
あるいは、シャットダウンイベントを検知しても自動的に終了します。
Transcript の中身
どんなログが保存されたのか見てみましょう。
********************** Windows PowerShell トランスクリプト開始 開始時刻: 20140908044205 ユーザー名 : GREENDEPLOY\Administrator コンピューター : GREENDEPLOY (Microsoft Windows NT 6.2.9200.0) ********************** トランスクリプトが開始されました。出力ファイル: C:\Users\Administrator\Documents\PowerShell_transcript.20140908044205.txt PS C:\Users\Administrator> "hoge" hoge PS C:\Users\Administrator> "fuga" fuga PS C:\Users\Administrator> Stop-Transcript ********************** Windows PowerShell トランスクリプト終了 終了時刻: 20140908044230 **********************
どうでしょうか。すばらしいですね。とりあえず操作ログを! と思ったら、何も考えずStart-Transcriptをすればokです。 -Appendもあるので、追記も問題なしです。
ISE ではTranscriptがサポートされていなかった
そう、v4まではPowerShell ISE上でのTranscriptがサポートされていませんでした。
v4でPowerShell ISE上で、 Start-Transcriptを実行すると次のメッセージが表示されて実行を拒否されます。
Start-Transcript : このホストはトランスクリプションをサポートしていません。
発生場所 行:1 文字:1
+ Start-Transcript
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : NotImplemented: (:) [Start-Transcript], PSNotSupportedException
+ FullyQualifiedErrorId : NotSupported,Microsoft.PowerShell.Commands.StartTranscriptCommand

v5 では ISE で Transcriptが可能に
PowerShell v5でISEをはじめとするホストプログラムでTranscriptが可能になります。VSでも可能になるでしょう。
PowerShell v5をいれたISEでStart-Transcriptを実行すると?

できましたね。
Visual Studio で使えるのか
もちろんできます。.NET開発者の標準ツールと化したNuGetのPackage Manager Console。これは、PowerShellなのです。そう、Install-PackageもPowerShell Cmdletです。
では、Package Manager ConsoleでStart-Transcriptをしてみましょう。
Start-Transcript

できましたね? それでは、 RespClientをいれてみましょう。
PS> Install-Package RespClient 'RespClient 1.1.7' をインストールしています。 'RespClient 1.1.7' が正常にインストールされました。
Transcriptを止めます。
PS> Stop-Transcript トランスクリプトが停止されました。出力ファイル: C:\Users\acquire\Documents\PowerShell_transcript.WINDOWS81X64.Tr1Yaudt.20140908045501.txt
ログを見ましょう。
PS> cat C:\Users\acquire\Documents\PowerShell_transcript.WINDOWS81X64.Tr1Yaudt.20140908045501.txt ********************** Windows PowerShell transcript start Start time: 20140908045502 Username: WINDOWS81X64\acquire RunAs User: WINDOWS81X64\acquire Machine: WINDOWS81X64 (Microsoft Windows NT 6.3.9600.0) Host Application: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe Process ID: 9904 ********************** PS> $__pc_args=@();$input|%{$__pc_args+=$_};if(Test-Path Function:\TabExpansion2){(TabExpansion2 $__pc_args[0] $__pc_args[0].length).CompletionMatches|%{$_.CompletionText}}else{TabExpansion $__pc_args[0] $__pc_args[1]};Remove-Variable __pc_args -Scope 0; Install-Package OneGet\Install-Package PS> Install-Package RespClient PS> Stop-Transcript ********************** Windows PowerShell transcript end End time: 20140908045929 **********************
ログがでましたね! OngetモジュールのInstall-Packageと競合しているところがずさんで素敵です。
まとめ
Transcriptは、日の目を浴びみくい小さな機能ですが、操作ログという意味ではとても便利です。
自動化でログを考えるのがめんどくさい? でもバックグラウンドでどう動いたか知りたい? Transcriptしてください。
標準出力以外にも、VerboseやErrprストリームも拾ってくれるので重宝します。開発者でもVSで、Nugetのログをとったりできるのは、なかなか便利ですね。