PowerShell v5.1 Select-对象控制台输出与 v3.0 不同

PowerShell v5.1 Select-Object Console Output Is Different from v3.0

我刚刚将 PowerShell 从 v3.0 升级到 v5.1,并注意到 Select-Object 和 Format-Table 的控制台输出行为非常不同。如果 属性 的值太长,所有后来的属性都会完全从控制台输出中分流出来(我可以看到所有值仍在传递 - 只是在控制台输出中被抑制)。我想要一种简单的方法来复制 2.0/3.0(4.0?)的旧行为,其中值被截断以适合控制台中的所有属性,因为一目了然地比较数据要容易得多,但我想不通想办法做到这一点。

这是一个例子:我制作了一个哈希表数组,然后尝试在 120 个字符宽度的控制台中查看输出:

$array = @()
$array += New-Object PSObject -Property @{Name="Test1";Value1="samplestring";Value2="Omitted Text"}
$array += New-Object PSObject -Property @{Name="Test2";Value1="Much longer string. More than 120 characters, so that we can suppress Value2's console output. This sentence ought to do it.";Value2="Omitted Text"}
$array | select Name,Value1,Value2

在PS2.0和3.0中,输出正是我想要的:

Name                                    Value1                                  Value2
----                                    ------                                  ------
Test1                                   samplestring                            Omitted Text
Test2                                   Much longer string. More than 120 ch... Omitted Text

...但是在 5.1 中,它似乎自动应用 Format-Table -AutoSize 并给我这个:

Name  Value1
----  ------
Test1 samplestring
Test2 Much longer string. More than 120 characters, so that we can suppress Value2's console output. This sentence o...

我试过摆弄 Format-Table 的计算属性,但我无法使宽度 属性 起作用,老实说,指定每个 属性 对于我正在输入的命令 & 运行 来说工作量太大了。我是否遗漏了其他命令,或者我是否对升级感到后悔?

我似乎在 V5.1 上工作得很好

我找不到将行为改回旧版本的解决方案, 但是:我能够写一些可能适合您需要的东西。

$array = @()
$array += New-Object PSObject -Property 
@{Name="Test1";Value1="samplestring";Value2="Omitted Text"}
$array += New-Object PSObject -Property @{Name="Test2";Value1="Much longer string. More than 120 characters, so that we can suppress Value2's console output. This sentence ought to do it.";Value2="Omitted Text"}

$array | Format-table -Property @{ e='name'; width=40 }, `
                                @{ e='value1'; width=40 }, `
                                @{ e='value2'; width=40 }

另外,我想我会把我的两种感觉放在一个不相关的事情上。 随着数组规模的扩大,+= 运算符对性能不利,因为它必须 (据我所知)重新复制整个数组,然后向其中添加下一个元素。如果您正在处理大型数据集并进行大量添加和删除条目,我建议您使用列表。