我有一个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}
场景二 - 没有输出 w/写项目功能
我创建了一个名为Write-Projects
封装格式化行为的函数,以防我决定更改格式化方式。然而,当我这样做时,控制台不会打印任何内容。
Function Write-Projects
{
Param([Object[]] $projects)
$projects
}
$projects = Get-Projects
Write-Projects $projects
# No Console Output
场景 3 - 带有写入项目功能的字符串输出
如果我修改 Write-Projects 以使用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 - 带有写入项目功能的表格输出
我发现了解决问题的这个问题,但我不确定为什么。基本上我的 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}
在每种情况下发生了什么以及为什么我得到所描述的输出?