知識マップ: Write-Hostをやめる ── PowerShellの出力ストリームとログ設計

記事「Write-Hostをやめる ── PowerShellの出力ストリームとログ設計」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。

PowerShellには成功・エラー・警告・詳細・デバッグ・情報の6つの出力ストリームがあり、後続の処理へ渡るのは成功ストリームだけである。Write-Hostは情報ストリームに書き込むため6番でのリダイレクトや捕捉はできるが、既定で常に画面へ表示され続けるため、値を返す用途である成功ストリームの代わりには推奨されない。関数は内部で出力したすべてのオブジェクトを成功ストリームへ返すため、戻り値のあるコマンドを呼び捨てにすると関数の戻り値が汚れ、この問題は$null=…による出力の抑止で軽減できる。Write-VerboseやWrite-Warningなどは[CmdletBinding()]を付けた関数で共通パラメーターにより呼び出し側から表示・捕捉を制御でき、運用として記録したい出来事はWrite-Informationと構造化ログに、進捗表示はデータストリームではなくログに残せないためWrite-Progressと分けて扱う。

PowerShellの出力ストリームとログ設計の知識マップPowerShellの6つの出力ストリームがWrite-HostやWrite-Verboseなど各書き込みコマンドとどう対応し、CmdletBindingと共通パラメーターによる制御、関数の戻り値の汚染、構造化ログやトランスクリプトへどうつながるかを示す図利用する用いるのは非推奨利用する利用する利用する利用する利用する利用する前提とする実装を担うで構成できるで構成できるで構成できるで構成できるで構成できる原因になり得る軽減する推奨される対応用いるのは非推奨利用するPowerShellの出力ストリームWrite-HostWrite-Output成功ストリームWrite-VerboseWrite-DebugWrite-WarningWrite-InformationWrite-Error[CmdletBinding()]属性共通パラメーター関数の戻り値の汚染$null=…による出力の抑止構造化ログ(structured log)Write-ProgressStart-Transcript

概念間の関係(全20件)

図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。

主要概念の定義

PowerShellの出力ストリーム
PowerShellが持つ成功・エラー・警告・詳細・デバッグ・情報の6種類の出力の通り道の総称で、それぞれ番号でリダイレクトできる。
Write-Host
PowerShell 5.0以降はWrite-Informationのラッパーとして情報ストリームへ出力するコマンドレットで、$InformationPreferenceや-InformationActionの影響を受けず(唯一の例外は-InformationAction Ignore)既定でも常に画面に表示される。
Write-Output
オブジェクトを成功ストリーム(パイプライン)へ送るコマンドレットで、明示的に呼ばなくても式の結果は同じように出力される。
Write-Verbose
詳細(4番)ストリームへメッセージを書き込むコマンドレットで、既定では表示されず呼び出し側が-Verboseを指定したときだけ表示される。
Write-Debug
デバッグ(5番)ストリームへメッセージを書き込むコマンドレットで、既定では表示されず呼び出し側が-Debugを指定したときだけ表示される。
Write-Warning
警告(3番)ストリームへメッセージを書き込むコマンドレットで、既定で表示され、-WarningActionや-WarningVariableで呼び出し側から制御・捕捉できる。
Write-Information
情報(6番)ストリームへ明示的に書き込むコマンドレットで、-Tagsによる分類ができ、既定では表示されないが-InformationVariableなどで捕捉できる。
Write-Error
エラー(2番)ストリームへErrorRecordを書き込むコマンドレットで、-ErrorActionや-ErrorVariableで呼び出し側から制御・捕捉できる。
[CmdletBinding()]属性
関数やスクリプトに付けることで、コンパイル済みコマンドレットと同様の「高度な関数」として動作させ、共通パラメーターや$PSCmdletを自動的に使えるようにするPowerShellの属性。
成功ストリーム
6つの出力ストリームのうち、後続のパイプラインや変数代入へ渡る唯一のストリーム(1番)で、Write-Outputまたは裸の出力がここに書き込む。
$null=…による出力の抑止
不要な戻り値を$null = ...への代入で捨てる書き方で、Out-Nullへのパイプや[void]キャストより軽量な抑止手段とされる。
Write-Progress
コマンドの進行状況をホストの進捗表示として出すコマンドレットで、リダイレクト可能なデータストリームではなく、ログには残せない。
Start-Transcript
セッションのコマンドとコンソール出力をまるごとテキストファイルに記録するコマンドレットで、Stop-Transcriptで停止する。

機械可読データ

このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。