[ホーム] > [間違えやすい類語 IT編一覧] > [Powershellでファイル出力する3種類の比較(Try,Transcript,リダイレクト)]

Powershellでファイル出力する3種類の比較(Try,Transcript,リダイレクト)

このページではPowershell における結果のファイル出力方法の違いに関して説明します。バッチファイルで使われるリダイレクトはあまり使われないようです。

(注意)分かりやすく簡単に記載しており、一部の環境や分野では記載内容が異なる可能性があります。あくまでも参考程度でお読みください。

比較表

比較は以下の表の通りとなります。

説明Try 〜 CatchStart-Transcript〜Stop-Transcriptリダイレクト
概要Try 内でエラーが発生した場合に Catch の処理が実行される。その場合にエラーの内容をファイルに記録することが可能となる。開始から終了の間の処理を記録する。環境及び出力やエラーの内容が記録される。
古くはUNIX系のシェルで使用されている方式です。Windows のバッチファイルでも採用されています。ただしPowershellではあまり使われないようです。
標準出力×(出力されない)〇(出力される)〇(出力される)
エラー出力〇(出力される)〇(出力される)×(出力されない。例外が発生する。)
$ErrorActionPreference = "Stop"

Try{
write-output "test"
$a = 1 / 0
}
Catch
{
$error[0] | Out-String | Out-File C:\temp2\output.txt
}

test
Start-Transcript C:\temp2\output.txt

write-output "test"
$a = 1 / 0

Stop-Transcript

test
0 で除算しようとしました。
発生場所 C:\temp3\abc.ps1:4 文字:1
+ $a = 1 / 0
+ ~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RuntimeException


write-output "test" > C:\temp2\output.txt
$a=1/0 2> C:\temp2\err.txt

0 で除算しようとしました。
発生場所 C:\temp3\abc.ps1:2 文字:1
+ $a=1/0 2> C:\temp2\err.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], RuntimeException
+ FullyQualifiedErrorId : RuntimeException


C:\temp2\output.txtの内容0 で除算しようとしました。
発生場所 C:\temp3\abc.ps1:5 文字:2
+ $a = 1 / 0
+ ~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], RuntimeException
+ FullyQualifiedErrorId : RuntimeException

**********************
Windows PowerShell トランスクリプト開始
開始時刻: 20190318001134
ユーザー名: PCNAME\username
RunAs ユーザー: PCNAME\username
構成名:
<中略>
SerializationVersion: 1.1.0.1
**********************
test
PS>終了エラー(): "0 で除算しようとしました。"
0 で除算しようとしました。
発生場所 C:\temp3\abc.ps1:4 文字:1
+ $a = 1 / 0
+ ~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RuntimeException
test

(*) C:\temp2\err.txt は出力なし
注意--write-host はファイルへ直接書き出すためリダイレクトはできません。

関連リンク:
【最大メリットとは】Powershell と コマンドプロンプトの違いを比較表で説明
netsh、wmic、powershell、コマンドプロンプトの違い
Powershell実行方法の違い | インタプリタ、スクリプトファイル、コマンドプロンプトから実行
Windowsにおけるリダイレクトとパイプの違い

[ホーム] > [間違えやすい類語 IT編一覧]
,







【注意】本ページは著作権で保護されています。内容は何人も補償しません。時間的あるいは金銭的損失等、一切保証しません。

理解しやすく記載されており、一部不正確な記載がある可能性があります。ご自身の責任で参考にしてください。