今回も前回に続き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でも使えるのです。やったー!
https://tech.guitarrapc.com/entry/2014/09/05/065912
https://tech.guitarrapc.com/entry/2014/09/08/042747
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のログをとったりできるのは、なかなか便利ですね。