Powershell返回错误的输出

Powershell返回错误的输出,powershell,Powershell,我简化了这个过程,这样任何人都可以复制它(在我的脚本中,这是工作流中的一个问题,不涉及任何函数,因此我无法将这些值保存在变量中,然后通过控制台显示它们)。第一件事是使用powershell ISE function AAA { $datum1 = New-Object -TypeName PSObject $datum1 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA"

我简化了这个过程,这样任何人都可以复制它(在我的脚本中,这是工作流中的一个问题,不涉及任何函数,因此我无法将这些值保存在变量中,然后通过控制台显示它们)。第一件事是使用powershell ISE

function AAA { $datum1 = New-Object -TypeName PSObject $datum1 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA" $datum1 | Add-Member -MemberType NoteProperty -Name ColumnB -Value "BB" return $datum1 } function BBB { $datum2 = New-Object -TypeName PSObject $datum2 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA" $datum2 | Add-Member -MemberType NoteProperty -Name ColumnC -Value "CC" $datum2 | Add-Member -MemberType NoteProperty -Name ColumnD -Value "DD" $datum2 | Add-Member -MemberType NoteProperty -Name ColumnE -Value "EE" $datum2 | Add-Member -MemberType NoteProperty -Name ColumnF -Value "FF" return $datum2 } AAA BBB
简单的解决方法是通过管道将输出传输到主机:

功能AAA{
$datum1=新对象-类型名称PSObject
$datum1 |添加成员-成员类型NoteProperty-名称列A-值“AA”
$datum1 |添加成员-成员类型NoteProperty-名称列B-值“BB”
返回$datum1
}
功能BBB{
$datum2=新对象-类型名称PSObject
$datum2 |添加成员-成员类型NoteProperty-名称列A-值“AA”
$datum2 |添加成员-成员类型NoteProperty-名称列C-值“CC”
$datum2 |添加成员-成员类型NoteProperty-名称列D-值“DD”
$datum2 |添加成员-成员类型NoteProperty-名称列-值“EE”
$datum2 |添加成员-成员类型NoteProperty-名称列F-值“FF”
返回$datum2
}
AAA |外部主机
BBB |外接主机
给出输出:

ColumnA ColumnB
------- -------
AA      BB     

ColumnA : AA
ColumnC : CC
ColumnD : DD
ColumnE : EE
ColumnF : FF
问题是powershell喜欢输出具有四个或更少成员的自定义对象。对于五个或更多成员,它们是垂直输出的。然后出现了一些奇怪的整洁原则:如果您连续输出多个对象,powershell将尝试保持相同的格式。因此,如果从水平方向开始,它将保持水平方向,并且只输出与第一个自定义对象同名的成员。如果您垂直开始,它将继续垂直运行并输出所有名称

这就是为什么如果你去:

BBB
AAA
你会得到

ColumnA : AA
ColumnC : CC
ColumnD : DD
ColumnE : EE
ColumnF : FF

ColumnA : AA
ColumnB : BB
相反


我还没有找到任何关于这个的文档。这些只是我自己的观察结果。

简单的解决方法是通过管道将输出传输到主机上:

功能AAA{
$datum1=新对象-类型名称PSObject
$datum1 |添加成员-成员类型NoteProperty-名称列A-值“AA”
$datum1 |添加成员-成员类型NoteProperty-名称列B-值“BB”
返回$datum1
}
功能BBB{
$datum2=新对象-类型名称PSObject
$datum2 |添加成员-成员类型NoteProperty-名称列A-值“AA”
$datum2 |添加成员-成员类型NoteProperty-名称列C-值“CC”
$datum2 |添加成员-成员类型NoteProperty-名称列D-值“DD”
$datum2 |添加成员-成员类型NoteProperty-名称列-值“EE”
$datum2 |添加成员-成员类型NoteProperty-名称列F-值“FF”
返回$datum2
}
AAA |外部主机
BBB |外接主机
给出输出:

ColumnA ColumnB
------- -------
AA      BB     

ColumnA : AA
ColumnC : CC
ColumnD : DD
ColumnE : EE
ColumnF : FF
问题是powershell喜欢输出具有四个或更少成员的自定义对象。对于五个或更多成员,它们是垂直输出的。然后出现了一些奇怪的整洁原则:如果您连续输出多个对象,powershell将尝试保持相同的格式。因此,如果从水平方向开始,它将保持水平方向,并且只输出与第一个自定义对象同名的成员。如果您垂直开始,它将继续垂直运行并输出所有名称

这就是为什么如果你去:

BBB
AAA
你会得到

ColumnA : AA
ColumnC : CC
ColumnD : DD
ColumnE : EE
ColumnF : FF

ColumnA : AA
ColumnB : BB
相反


我还没有找到任何关于这个的文档。这些只是我自己的观察结果。

我无法解释发生了什么,但我有一些观察结果。BBB具有正确的属性,如果您随后对BBB进行评估,您可以看到这一点。显然,只显示了公共属性。如果将
列B
属性添加到
$datum2
,也会显示该属性。如果你调用BBB AAA,你会得到预期的输出,但不是作为一个表。我无法解释发生了什么,但我有一些观察结果。BBB具有正确的属性,如果您随后对BBB进行评估,您可以看到这一点。显然,只显示了公共属性。如果将
列B
属性添加到
$datum2
,也会显示该属性。如果你调用BBB AAA,你会得到预期的输出,但不是作为一个表。列的数量其实并不重要,第一个函数有两列,第二个函数有三列,同样的问题同样可以重现。out host是一个很好的函数解决方案,因为您强制在shell中生成同步输出,但就我个人而言,我正在尝试处理工作负载,我不能每次都绘制输出,但首先我必须收集信息,并且在工作流中这两种情况都会停止工作。我留下了一个例子作为答案,因为文本太长,不能作为评论留下。成员的数量确实很重要。如果您分别有两个和三个成员,那么这两个成员都将水平输出,并触发“仅打印公共属性”事件。即使没有任何共同的属性。哦,我很抱歉,真的!!两个包含五列或更多列的函数可以正常工作。列的数量并不重要,第一个包含两列的函数和第二个包含三列的函数的问题是相同的。out host是一个很好的函数解决方案,因为您强制在shell中生成同步输出,但就我个人而言,我正在尝试处理工作负载,我不能每次都绘制输出,但首先我必须收集信息,并且在工作流中这两种情况都会停止工作。我留下了一个例子作为答案,因为文本太长,不能作为评论留下。成员的数量确实很重要。如果您分别有两个和三个成员,那么这两个成员都将水平输出,并触发“仅打印公共属性”事件。即使没有任何共同的属性。哦,我很抱歉,真的!!具有五列或更多列的两个函数可以正常工作。
ColumnA : AA
ColumnC : CC
ColumnD : DD
ColumnE : EE
ColumnF : FF

ColumnA : AA
ColumnB : BB