我有一個函數Get-Projects
,它返回一個對象數組。我想將這些打印到控制檯,以便用戶可以選擇他們感興趣的項目。但是,我有四種情況,其中只有兩種打印所需/期望的結果。將PowerShell對象寫入控制檯時的行爲不同
方案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}
兩個方案 - 不輸出瓦特/寫功能的項目
我創建了一個名爲Write-Projects
封裝的情況下,格式化行爲,我決定改變如何格式化的道路功能。然而,當我這樣做時,沒有任何東西印在控制檯上。
Function Write-Projects
{
Param([Object[]] $projects)
$projects
}
$projects = Get-Projects
Write-Projects $projects
# No Console Output
方案3 - 字符串輸出瓦特/寫功能的項目
如果我修改寫項目中使用Write-Host $projects
我得到的控制檯輸出,但不是我所期待。這似乎是我的Object數組的字符串表示形式。
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 - 表格輸出瓦特/寫功能的項目
我發現this question解決了問題,但我不清楚這是爲什麼。本質上,我的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}
每種情況下發生了什麼,爲什麼我得到的輸出如上所述?