Get-Projects
オブジェクトの配列を返す関数があります。ユーザーが興味のあるプロジェクトを選択できるように、これらをコンソールに出力したいと考えています。
シナリオ 1 - 表形式の出力、機能なし
プロジェクトを単純に「返す」と、期待どおりに表形式で出力されます。これは望ましい形式です。
$projects = Get-Projects
$projects
# Console Output
id name children
-- ---- --------
1 Project 1 1 {@id=2; name=Project 2}
3 Project 3 3 {@id=4; name=Project 4}
シナリオ 2 - Write-Projects 関数による出力なし
Write-Projects
フォーマットの方法を後で変更することにした場合に備えて、フォーマットの動作をカプセル化するという名前の関数を作成しました。それでも、これを行うと、コンソールには何も出力されません。
Function Write-Projects
{
Param([Object[]] $projects)
$projects
}
$projects = Get-Projects
Write-Projects $projects
# No Console Output
シナリオ 3 - Write-Projects 関数を使用した文字列出力
Write-Projects を使用するように変更するWrite-Host $projects
と、コンソール出力は得られますが、期待したものではありません。私のオブジェクト配列の文字列表現のようです。
Function Write-Projects
{
Param([Object[]] $projects)
Write-Host $projects
}
$projects = Get-Projects
Write-Projects $projects
# Console Output
@{id=1; name=Project 1; children=System.Object[]} @{id=2; name=Project 2; children=System.Object[]}
シナリオ 4 - Write-Projects 関数を使用した表形式の出力
問題を解決するこの質問を発見しましたが、その理由はわかりません。基本的に、私の Write-Projects メソッドは次のようになります。
Function Write-Projects
{
Param([Object[]] $projects)
Write-Host ($projects | Format-Table | Out-String)
}
$projects = Get-Projects
Write-Projects $projects
# Console Output
id name children
-- ---- --------
1 Project 1 1 {@id=2; name=Project 2}
3 Project 3 3 {@id=4; name=Project 4}
これらの各シナリオで何が起こっているのか、説明されている出力が得られるのはなぜですか?