powershell - Powershell 返回错误的输出
问题描述
我已经简化了该过程,以便任何人都可以重现它(在我的脚本中,这是工作流中的一个问题,不涉及任何函数,因此我无法将这些值保存在变量中,然后通过控制台显示它们)。首先是使用powershell ISE。
功能AAA { $datum1 = 新对象 -TypeName PSObject $基准1 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA" $基准1 | Add-Member -MemberType NoteProperty -Name ColumnB -Value "BB" 返回 $datum1 } 功能 BBB { $datum2 = 新对象 -TypeName PSObject $基准2 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnC -Value "CC" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnD -Value "DD" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnE -Value "EE" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnF -Value "FF" 返回 $datum2 } AAA BBB
输出:
A 列 B 列 -------- -------- AA BB AA
知道为什么会这样吗?
编辑:我已经通过以下方式解决了这个“sh1t”
功能AAA { $datum1 = 新对象 -TypeName PSObject $基准1 | Add-Member -MemberType NoteProperty -Name Index -Value "1" $基准1 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA" $基准1 | Add-Member -MemberType NoteProperty -Name ColumnB -Value "BB" $基准1 } 功能 BBB { $datum2 = 新对象 -TypeName PSObject $基准2 | Add-Member -MemberType NoteProperty -Name Index -Value "2" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnC -Value "CC" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnD -Value "DD" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnE -Value "EE" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnF -Value "FF" $基准2 } AAA |?{$_.Index -eq "1"} | 英国《金融时报》 BBB |?{$_.Index -eq "2"} | 英尺
无论如何,有人可以解释发生了什么吗?我很想了解原因并寻找相关信息
EDIT2:回复 Palle Due,
它对我的场景根本不起作用,因为它增加了一些复杂性。
Out-Host
不是一种选择。提供的示例:
工作流获取报告 { 参数([字符串[]]$计算机名) foreach -Parallel ($computer in $computername) { 序列 { 内联脚本 { $AAA = 调用命令 -ScriptBlock { $datum1 = 新对象 -TypeName PSObject $基准1 | Add-Member -MemberType NoteProperty -Name Index -Value "1" $基准1 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA" $基准1 | Add-Member -MemberType NoteProperty -Name ColumnB -Value "BB" 返回 $datum1 } $AAA | 主机外 $BBB = 调用命令 -ScriptBlock { $datum2 = 新对象 -TypeName PSObject $基准2 | Add-Member -MemberType NoteProperty -Name Index -Value "2" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnA -Value "AA" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnC -Value "CC" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnD -Value "DD" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnE -Value "EE" $基准2 | Add-Member -MemberType NoteProperty -Name ColumnF -Value "FF" 返回 $datum2 } $BBB | 主机外 } #endinlinescript } #endsequence } #endforeach } #endWF $结果 = @() $results = Get-Report -Verbose -Computer "localhost","localhost" $结果 | 英尺
解决方案
简单的解决方法是将输出通过管道传输到Out-Host
:
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 | Out-Host
BBB | Out-Host
给出输出:
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
反而。
我还没有找到任何文档。它们只是我自己的观察。
推荐阅读
- linux - 创建 Conda 环境状态失败:143
- jquery - 在 Angular 9 项目中使用没有 JQuery 的 Bootstrap 4
- python - 我的 python 显示此错误:启动器中的致命错误 [WinError 5] 因为我重命名了我的用户文件夹名称
- javascript - 当变量达到特定值时向所有客户端发出
- html - Rails在body标签内渲染导航栏
- javascript - React Native 在模态中更改虚拟数据的状态
- r - 用 optim() 求方程的最大值
- reactjs - 如何保持 React Native 动画变换状态?
- python - 如何在命令后使不和谐机器人存储/查找消息的其余部分?
- mysql - 试图让 ocelotgui 调试工作