今回も前回に続き 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 v4 まで
PowerShell.exe を起動してから次のように行っていました。
Transcript の開始
v4までは、Transcript を開始するには PowerShell.exe で次のCmdletを実行しました。
Start-Transcript
これで、勝手に操作が記録されます。
トランスクリプトが開始されました。出力ファイル: C:\Users\Administrator\Documents\PowerShell_transcript.20140908044205.txt
もちろん、-Path を付けることで、保存先を指定も可能です。
NAME Start-Transcript SYNOPSIS Creates a record of all or part of a Windows PowerShell session in a text file. SYNTAX Start-Transcript [[-Path] <String>] [-Append] [-Force] [-NoClobber] [-Confirm] [-WhatIf] [<CommonParameters>] Start-Transcript [[-LiteralPath] <String>] [-Append] [-Force] [-NoClobber] [-Confirm] [-WhatIf] [<CommonParameters> ] DESCRIPTION The Start-Transcript cmdlet creates a record of all or part of a Windows PowerShell session in a text file. The tra nscript includes all command that the user types and all output that appears on the console. PARAMETERS -Append [<SwitchParameter>] Adds the new transcript to the end of an existing file. Use the Path parameter to specify the file. Required? false Position? named Default value Accept pipeline input? false Accept wildcard characters? false -Force [<SwitchParameter>] Allows the cmdlet to append the transcript to an existing read-only file. When used on a read-only file, the cm dlet changes the file permission to read-write. Even using the Force parameter, the cmdlet cannot override secu rity restrictions. Required? false Position? named Default value Accept pipeline input? false Accept wildcard characters? false -NoClobber [<SwitchParameter>] Will not overwrite (replace the contents) of an existing file. By default, if a transcript file exists in the s pecified path, Start-Transcript overwrites the file without warning. Required? false Position? named Default value Accept pipeline input? false Accept wildcard characters? false -Path <String> Specifies a location for the transcript file. Enter a path to a .txt file. Wildcards are not permitted. If you do not specify a path, Start-Transcript uses the path in the value of the $Transcript global variable. I f you have not created this variable, Start-Transcript stores the transcripts in the $Home\My Documents directo ry as \PowerShell_transcript.<time-stamp>.txt files. If any of the directories in the path do not exist, the command fails. Required? false Position? 1 Default value Accept pipeline input? false Accept wildcard characters? false -LiteralPath <String> Specifies a location for the transcript file. Unlike Path, the value of the LiteralPath parameter is used exact ly as it is typed. No characters are interpreted as wildcards. If the path includes escape characters, enclose it in single quotation marks. Single quotation marks tell Windows PowerShell not to interpret any characters as escape sequences. Required? false Position? 1 Default value Accept pipeline input? false Accept wildcard characters? false -Confirm [<SwitchParameter>] Prompts you for confirmation before running the cmdlet. Required? false Position? named Default value false Accept pipeline input? false Accept wildcard characters? false -WhatIf [<SwitchParameter>] Shows what would happen if the cmdlet runs. The cmdlet is not run. Required? false Position? named Default value false Accept pipeline input? false Accept wildcard characters? false <CommonParameters> This cmdlet supports the common parameters: Verbose, Debug, ErrorAction, ErrorVariable, WarningAction, WarningVariable, OutBuffer, PipelineVariable, and OutVariable. For more information, see about_CommonParameters (https://go.microsoft.com/fwlink/?LinkID=113216). INPUTS None You cannot pipe objects to this cmdlet. OUTPUTS System.String Start-Transcript returns a string that contains a confirmation message and the path to the output file. NOTES To stop a transcript, use the Stop-Transcript cmdlet. To record an entire session, add the Start-Transcript command to your profile. For more information, see about_ Profiles. -------------------------- EXAMPLE 1 -------------------------- PS C:\>start-transcript This command starts a transcript in the default file location. -------------------------- EXAMPLE 2 -------------------------- PS C:\>start-transcript -path c:\transcripts\transcript0.txt -noclobber This command starts a transcript in the Transcript0.txt file in C:\transcripts. The NoClobber parameter prevents an y existing files from being overwritten. If the Transcript0.txt file already exists, the command fails. RELATED LINKS Online Version: https://go.microsoft.com/fwlink/p/?linkid=289793 Stop-Transcript
なにかてきとーに入力する
てきとーです。
PS C:\Users\Administrator> "hoge" hoge PS C:\Users\Administrator> "fuga" fuga
としました。
Transcript の終了
終了するには、次のCmdlet を入力します。
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 をいれてみましょう。
Install-Package RespClient
PM> Install-Package RespClient 'RespClient 1.1.7' をインストールしています。 'RespClient 1.1.7' が正常にインストールされました。
Transcriptを止めます。
Stop-Transcript
トランスクリプトが停止されました。出力ファイル: C:\Users\acquire\Documents\PowerShell_transcript.WINDOWS81X64.Tr1Yaudt.20140908045501.txt
ログを見ましょう。
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 ********************** PM>$__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 PM>Install-Package RespClient PM>Stop-Transcript ********************** Windows PowerShell transcript end End time: 20140908045929 **********************
ログがでましたね! Ongetモジュールの Install-Package
と競合しているところがずさんで素敵です。
まとめ
Transcript は、日の目を浴びみくい小さな機能ですが、操作ログという意味ではとても便利です。
自動化でログを考えるのがめんどくさい? でもバックグラウンドでどう動いたか知りたい? Transcript してください。
標準出力以外にも、Verbose や Errpr ストリームも拾ってくれるので重宝すると思いますよ。
開発者でも VS で、Nuget のログをとったり。ね。