使用PowerShell将对象数组转换为PSCustomObject

3
我想转换这个对象数组。
Name    CIDR
----    ----
sdc-MO  10.92.18.136/20
sdc-RM  10.77.6.34/20

将多个 [PSCustomObject] 合并为单个对象

sdc-MO           sdc-RM
-------           -------
{10.92.18.136/20} {10.77.6.34/20}

请推荐任何易于操作的方法。谢谢。


你尝试过什么?你遇到了错误吗? - Doug Maurer
4
请问您需要翻译的内容是:[编辑]问题并展示数组如何被赋值。PowerShell 数组没有标题,因此拥有 Name 和 CIDR 意味着要么在第一种情况下它不是一个数组,要么它是一个经过管道传输到 format-table 或其他不同格式的数组数组。 - vonPryz
@vonPryz 什么?一个包含两个对象,每个对象都有 NameCIDR 属性的数组默认情况下会以那种方式显示。 - Mathias R. Jessen
1个回答

1
将每个对象添加到哈希表或其他字典类型的字典中,然后使用该字典创建对象(每个条目将成为单独的属性):
$array = @(
  [pscustomobject]@{ Name = 'sdc-MO'; CIDR = '10.92.18.136/20' }
  [pscustomobject]@{ Name = 'sdc-RM'; CIDR = '10.77.6.34/20' }
)

# Prepare a new dictionary to hold the properties
$newProperties = [ordered]@{}

foreach($inputObject in $array){
  # If we don't already have a property with the given name, 
  # create a new entry in the dictionary
  if(-not $newProperties.Contains($inputObject.Name)){
    $newProperties.Add($inputObject.Name, @())
  }

  # Add the `CIDR` value to the corresponding property name
  $newProperties[$inputObject.Name] += $inputObject.CIDR
}

$newObject = [pscustomobject]$newProperties

$newObject 将会像你在问题中描述的那样:

PS C:\> $newObject

sdc-MO            sdc-RM
------            ------
{10.92.18.136/20} {10.77.6.34/20}

1
@iRon 不确定我是否理解 OP 做错了什么?他的第一个示例恰好是包含两个对象,每个对象都有 Name 和 CIDR 属性的数组的默认格式。 - Mathias R. Jessen
@iRon,我对OP的帖子进行了轻微编辑,可能就可以解决问题了 :) - Mathias R. Jessen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接