PowerShell v5.1选择对象控制台输出不同于v3.0

PowerShell v5.1选择对象控制台输出不同于v3.0,powershell,powershell-5.0,console-output,Powershell,Powershell 5.0,Console Output,我刚刚将PowerShell从v3.0升级到v5.1,并注意到Select Object和Format Table的控制台输出行为非常不同。如果一个属性的值太长,那么以后的所有属性都会从控制台输出中完全分流出去。我可以看到,所有的值仍然是传递的,只是在控制台输出中被抑制了。我想要一个简单的方法来复制2.0/3.0 4.0的旧行为?其中值被截断以适应控制台中的所有属性,因为一眼就能比较数据要容易得多,但我想不出一种方法来做到这一点 下面是一个示例:我创建了一个哈希表数组,然后尝试在一个120字符宽

我刚刚将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表的计算属性,但无法使width属性正常工作,老实说,对于我正在键入和运行的命令来说,指定每个属性的宽度太麻烦了。是否有其他命令我丢失了,或者我一直在后悔我的升级?

在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 }
而且,我想我会把我的两种感觉放在一件无关的事情上。 随着阵列规模的扩大,+=运算符对性能不利,因为它必须
据我所知,重新复制整个数组,然后向其中添加下一个元素。如果您使用的是大型数据集,并且要添加和删除大量条目,我建议您使用列表。

为什么要使用选择对象?它似乎在PS:5.0.10586.117中工作。您可以使用:PowerShell.exe-版本2。对我来说是可行的。切换到版本2肯定是可行的,尽管我升级到v5.1的首要原因是使用新的cmdlet。我一定会记住的。@theincorgible1这只是一个例子。我真正的用例是从Exchange/Skype/EWS/Azure广告中提取多个邮箱/电子邮件/用户对象,并查看它们的各种属性。我知道格式列表将显示我需要的所有信息。我很喜欢Select Object/format table中的表格格式。在您的情况下,它是正确的,因为您的控制台的宽度非常大。只需尝试本机PowerShell控制台,并将宽度配置设置为80,您就可以复制。我非常感谢您的工作。我希望避免这种情况,因为我只想快速、轻松地获取多个属性,而不必考虑列宽,但看起来这是最好的方法。我还不知道这会给我带来多大的麻烦,但如果真的很糟糕,我只会创建一个自定义函数,根据我选择的属性数量更改宽度。