LinuxやUNIXにあるscriptコマンドと同様に、PowerShellにも操作ログを記録するコマンドが存在する。それが『Start-Transcript(Stop-Transcript)』だ。 さて、このコマンドでログを記録する際、ちょっと困った挙動がある。コマンドプロンプト(cmd.exe)のコマンドを実行すると、ログに記録されないのだ…。
実際に、以下のようなコマンドを実行したとしよう。
Start-Transcript
Get-ChildItem
ipconfig
Stop-Transcript
しかし、出力されるログは以下のようになってしまう。
**********************
Windows PowerShell トランスクリプト開始
開始時刻: 20150227002537
ユーザー名 : Work-PC\Work
コンピューター : WORK-PC (Microsoft Windows NT 6.1.7601 Service Pack 1)
**********************
トランスクリプトが開始されました。出力ファイル: C:\Users\Work\Documents\PowerShell_transcript.20150227002537.txt
PS C:\> Get-ChildItem
ディレクトリ: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2014/01/25 22:48 cygwin
d---- 2014/01/25 18:04 cygwin64
d---- 2014/07/27 21:23 DeploymentShare
d---- 2014/01/19 20:24 ipmitool
d---- 2014/08/09 7:40 Offiline
d---- 2009/07/14 12:20 PerfLogs
d-r-- 2015/01/18 17:06 Program Files
d-r-- 2015/02/11 17:07 Program Files (x86)
d---- 2015/02/26 22:49 PSTools
d---- 2014/12/21 16:31 Public
d---- 2014/03/03 23:49 teraterm
d---- 2014/03/03 22:45 teraterm_log
d-r-- 2013/12/21 7:05 Users
d---- 2013/12/24 3:29 Windows
PS C:\> ipconfig
PS C:\>
PS C:\> Stop-Transcript
**********************
Windows PowerShell トランスクリプト終了
終了時刻: 20150227002552
**********************
見てわかるように、ipconfigの出力値だけが記録されていない。 これを出力させるには、以下のようにコマンドを実行させると良いだろう。
Start-Transcript
Get-ChildItem
ipconfig | Out-Default
Stop-Transcript
今度は、きちんとログに出力させることが出来た。
**********************
Windows PowerShell トランスクリプト開始
開始時刻: 20150227003014
ユーザー名 : Work-PC\Work
コンピューター : WORK-PC (Microsoft Windows NT 6.1.7601 Service Pack 1)
**********************
トランスクリプトが開始されました。出力ファイル: C:\Users\Work\Documents\PowerShell_transcript.20150227003014.txt
PS C:\> Get-ChildItem
ディレクトリ: C:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 2014/01/25 22:48 cygwin
d---- 2014/01/25 18:04 cygwin64
d---- 2014/07/27 21:23 DeploymentShare
d---- 2014/01/19 20:24 ipmitool
d---- 2014/08/09 7:40 Offiline
d---- 2009/07/14 12:20 PerfLogs
d-r-- 2015/01/18 17:06 Program Files
d-r-- 2015/02/11 17:07 Program Files (x86)
d---- 2015/02/26 22:49 PSTools
d---- 2014/12/21 16:31 Public
d---- 2014/03/03 23:49 teraterm
d---- 2014/03/03 22:45 teraterm_log
d-r-- 2013/12/21 7:05 Users
d---- 2013/12/24 3:29 Windows
PS C:\>
PS C:\> ipconfig | Out-Default
Windows IP 構成
イーサネット アダプター ローカル エリア接続:
接続固有の DNS サフィックス . . . :
IPv6 アドレス . . . . . . . . . . . : 240f:7:63e5:1:80f7:eca9:781f:987d
一時 IPv6 アドレス. . . . . . . . . : 240f:7:63e5:1:8df6:cc92:d66f:6725
リンクローカル IPv6 アドレス. . . . : fe80::80f7:eca9:781f:987d%10
IPv4 アドレス . . . . . . . . . . : 192.168.0.183
サブネット マスク . . . . . . . . : 255.255.255.0
デフォルト ゲートウェイ . . . . . : fe80::1eb1:7fff:fe44:2d3c%10
192.168.0.1
Tunnel adapter isatap.{59563340-7AE0-4F33-AD42-27CD5865DD5A}:
メディアの状態. . . . . . . . . . : メディアは接続されていません
接続固有の DNS サフィックス . . . :
Tunnel adapter ローカル エリア接続*:
接続固有の DNS サフィックス . . . :
IPv6 アドレス . . . . . . . . . . . : 2001:0:5ef5:79fb:147c:1472:8967:8e3c
リンクローカル IPv6 アドレス. . . . : fe80::147c:1472:8967:8e3c%12
デフォルト ゲートウェイ . . . . . :
PS C:\>
PS C:\> Stop-Transcript
**********************
Windows PowerShell トランスクリプト終了
終了時刻: 20150227003043
**********************
…う~ん、もうちょっと、Linuxとかの使い勝手に近づいて貰えないものだろうか。 bashからkshになっても、scriptコマンドは問題なく動作してくれるんだけど…