Powershell v5 のプロンプト
Powershell は prompt 関数でプロンプトに出力する文字列を変更できる
function prompt { "$env:computername > " }
ただ、Powershell v5(v4)では start-transcriptでファイルに出力すると
画面とファイルでプロンプトが一致しない
プロンプトにホスト名と日時を表示する
function prompt { "$(hostname)[$(get-date -f "yyyy/MM/dd HH:mm:ss,fff")] > " }
実行結果
PS C:\work> PS C:\work> start-transcript ./powershell1.log トランスクリプトが開始されました。出力ファイル: ./powershell1.log PS C:\work> PS C:\work> function prompt { "$(hostname)[$(get-date -f "yyyy/MM/dd HH:mm:ss,fff")] > " } takamrauPC[2017/05/26 22:43:59,164] > takamrauPC[2017/05/26 22:44:11,716] > takamrauPC[2017/05/26 22:44:12,116] > pwd Path ---- C:\work takamrauPC[2017/05/26 22:44:13,379] > takamrauPC[2017/05/26 22:44:17,072] > gc ./powershell1.log -tail 15 ********************** トランスクリプトが開始されました。出力ファイル: ./powershell1.log PS C:\work> function prompt { "$(hostname)[$(get-date -f "yyyy/MM/dd HH:mm:ss,fff")] > " } takamrauPC[2017/05/26 22:43:59,164] > takamrauPC[2017/05/26 22:44:11,716] > takamrauPC[2017/05/26 22:44:12,116] > PS C:\work> pwd ★★★← プロンプトがデフォルトのまま★★★ Path ---- C:\work takamrauPC[2017/05/26 22:44:13,379] > takamrauPC[2017/05/26 22:44:17,072] > takamrauPC[2017/05/26 22:44:18,764] >
関数内でコマンド実行やインスタンスを作成しないで、staticな値のみにすると、画面のプロンプトとファイルのプロンプトは一致する
プロンプトにホスト名と日時を表示する
function prompt { "$env:computername[$("{0:yyyy/MM/dd HH:mm:ss,fff}" -f $([datetime]::now))] > " }
実行結果
PS C:\work> PS C:\work> start-transcript ./powershell2.log トランスクリプトが開始されました。出力ファイル: ./powershell2.log PS C:\work> PS C:\work> function prompt { "$env:computername[$("{0:yyyy/MM/dd HH:mm:ss,fff}" -f $([datetime]::now))] > " } takamrauPC[2017/05/26 22:48:29,499] > takamrauPC[2017/05/26 22:48:33,818] > takamrauPC[2017/05/26 22:48:34,667] > pwd Path ---- C:\work takamrauPC[2017/05/26 22:48:35,401] > takamrauPC[2017/05/26 22:48:39,698] > takamrauPC[2017/05/26 22:48:39,816] > gc ./powershell2.log -tail 10 ********************** トランスクリプトが開始されました。出力ファイル: ./powershell2.log PS C:\work> function prompt { "$env:computername[$("{0:yyyy/MM/dd HH:mm:ss,fff}" -f $([datetime]::now))] > " } takamrauPC[2017/05/26 22:48:34,667] > pwd ★★★← コマンド実行しないでEnterのみ入力した行は出力されない★★★ Path ---- C:\work takamrauPC[2017/05/26 22:48:41,836] >
ただ上の方法だと、コマンドを実行しないでEnterのみ入力したときのプロンプトがファイルに出力されない
そこで2つをあわせて2行出力する
プロンプトにホスト名と日時を表示する
function prompt { $d="{0:yyyy/MM/dd HH:mm:ss,fff}" -f $([datetime]::now);"$env:computername[$d] > ";"$(hostname)[$d] > " }
実行結果
PS C:\work> PS C:\work> function prompt { $d="{0:yyyy/MM/dd HH:mm:ss,fff}" -f $([datetime]::now);"$env:computername[$d] > ";"$(hostname)[$d] > " } takamrauPC[2017/05/26 22:53:06,489] > takamrauPC[2017/05/26 22:53:10,552] > takamrauPC[2017/05/26 22:53:10,863] > pwd Path ---- C:\work takamrauPC[2017/05/26 22:53:11,352] > takamrauPC[2017/05/26 22:53:12,823] > gc ./powershell3.log -tail 15 ********************** トランスクリプトが開始されました。出力ファイル: ./powershell3.log PS C:\work> function prompt { $d="{0:yyyy/MM/dd HH:mm:ss,fff}" -f $([datetime]::now);"$env:computername[$d] > ";"$(hostname)[$d] > " } takamrauPC[2017/05/26 22:53:06,489] > takamrauPC[2017/05/26 22:53:10,552] > takamrauPC[2017/05/26 22:53:10,863] > takamrauPC[2017/05/26 22:53:10,863] > pwd Path ---- C:\work takamrauPC[2017/05/26 22:53:11,352] > takamrauPC[2017/05/26 22:53:12,823] > takamrauPC[2017/05/26 22:53:17,572] >
コマンド実行時のプロンプトは画面表示とファイルで一致する
Enterのみの場合のプロンプトもファイルに出力される
コマンド実行時は同じプロンプトがファイルに2行出力されてしまうが、しょうがない