Powershell通用集合列表不显示多个对象[重复]

Posted

技术标签:

【中文标题】Powershell通用集合列表不显示多个对象[重复]【英文标题】:Powershell generic collections list not displaying multiple object [duplicate] 【发布时间】:2021-02-18 05:19:09 【问题描述】:

我有两个集合和对象。当显示两个集合时,它只显示一个。请指教

Function Test
 $Table1 = New-Object 'System.Collections.Generic.List[System.Object]'

 $Table2 = New-Object 'System.Collections.Generic.List[System.Object]'

 $obj = [PSCustomObject]@
'Name'    = 'Jack'
'Age' = '21'
 
 $Table1.Add($obj)

  $obj2 = [PSCustomObject]@
'Name'    = 'Jack'
'city' = 'BKG'
 
 $Table2.Add($obj2)

 $Table1
 $Table2

 
 Test
output is:
Name Age
---- ---
Jack 21 
Jack    

我想要如下输出

Name Age
---- ---
Jack 21 

Name city
---- ----
Jack BKG 

请指教

【问题讨论】:

【参考方案1】:

当您将多个对象从一个数组或函数发送到控制台时,它将从它接收到的第一个对象中确定在表格中显示的属性。通常,从函数或数组接收到的对象是具有相似属性的相似对象,因此这是可行的。

在您的情况下,您发送了 2 个具有不同属性的对象,因此您得到了这种只看到第一个对象的属性的不良行为。这并不意味着第二个对象上不存在 city 属性或第二个对象具有 age 属性。

如果您想包含第二个对象的属性,您必须强制显示它们

test | Format-Table *, city

test | Format-Table name, age, city

在这种情况下,您会看到以下内容

Name Age city
---- --- ----
Jack 21
Jack     BKG

不完全是您想要的,但您现在至少可以看到这座城市的房产。您也可以使用 Format-List 而不指定属性名称,因为在这种格式中,每个对象都可以单独列出它们的每个实际属性。

test | Format-List                 

Name : Jack
Age  : 21

Name : Jack
city : BKG

如果您希望两个对象都在表格视图中,但像上面显示的那样分开表格,您可以使用 foreach 循环并将每个对象单独发送到 Format-Table 或 Out-Host 像这样

Test | ForEach-Object  $_ | Out-Host 

Name Age
---- ---
Jack 21


Name city
---- ----
Jack BKG

每个对象都是单独发送的,允许 Out-Host 评估并以表格格式包含每个对象的属性

【讨论】:

以上是关于Powershell通用集合列表不显示多个对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

字符串,列表,元组,字典,集合,序列通用操作

在不锁定集合的情况下从通用集合中获取 Count 值是不是安全?

使用通用列表作为基础源的 C# DataGridView 排序

Python之集合函数

PowerShell 函数不会返回对象

集合Set