不久前,我更改了我的Join-Object
cmdlet,这似乎导致了一个在我的任何测试中都没有发现的错误。
更改的目标主要是代码最小化,并尝试通过准备自定义 PSObject 并在管道中重用它来提高性能。
由于Join-Object
cmdlet 相当复杂,我创建了一个简化的 cmdlet 来显示具体问题:
(PowerShell 版本是5.1.16299.248
:)
Function Test($Count) {
$PSObject = New-Object PSObject -Property @{Name = $Null; Value = $Null}
For ($i = 1; $i -le $Count; $i++) {
$PSObject.Name = "Name$i"; $PSObject.Value = $i
$PSObject
}
}
直接测试输出完全符合我的预期:
Test 3 | ft
Value Name
----- ----
1 Name1
2 Name2
3 Name3
假设我是否将结果分配给变量(例如$a
)并不重要,但确实如此:
$a = Test 3
$a | ft
Value Name
----- ----
3 Name3
3 Name3
3 Name3
所以,除了分享这个经验,我想知道这是编程缺陷还是 PowerShell 错误/怪癖?