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