2

我刚刚将 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

在 PS 2.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 的计算属性,但我无法让 width 属性工作,老实说,指定每个属性的宽度对于我正在输入和运行的命令来说工作量太大了. 我是否缺少其他命令,或者我是否后悔升级?

4

2 回答 2

0

似乎在 V5.1 上对我来说工作正常

在此处输入图像描述

于 2018-08-28T04:51:47.773 回答
0

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

$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 }

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

于 2018-08-28T09:23:12.960 回答