【问题标题】:Powershell - how do I add multiple objects to a property on a custom object?Powershell - 如何将多个对象添加到自定义对象的属性中?
【发布时间】:2021-02-22 14:49:42
【问题描述】:

我目前正在做一个项目来记录一堆 SSIS 包。由于包存储在 XML 中,因此很容易将包导入为 XML,并且我可以获得所需的信息。

我想我想做的是用我自己定义的属性捕获对象中的关键信息,这样最后我可以以我选择的格式导出对象。

我试图了解对象的属性以及如何将多个对象分配给一个属性。

例如,我创建了一个代表 SSIS 包的对象 $Package。 该包将具有一些顶级属性,例如名称、路径和类型,所有这些属性都存储为字符串。但是包中有 5 个 ConnectionManager,所以我想将代表 ConnectionManager 的 5 个对象分配给 $Package。现在其中一个连接管理器有 2 个表达式,所以我想为 ConnectionManager 属性下的表达式属性引用 2 个对象。

如何将对象集合添加为现有自定义对象的属性,我必须一次将它们全部添加还是可以添加到该集合中?

【问题讨论】:

  • 你能提供一些代码来说明这个问题吗?

标签: powershell


【解决方案1】:

关于 Bee_Riii 的评论,您不必在定义对象时包含所有属性。您可以使用Add-Member 添加新数组。

Add-Member -InputObject $p -NotePropertyName myVariables -NotePropertyValue @(1,2,3)

您也可以选择使用现有值。

$existingValue = @(1,2,3)
   
Add-Member -InputObject $p -NotePropertyName myVariables -NotePropertyValue $existingValue

这里我使用变量名myVariables 作为预防措施。像namevariable 这样的通用名称经常与现有属性发生冲突。我养成了在这些名字前面加上“我”的习惯,以避免冲突。

您可能会发现这些资源很有用:

【讨论】:

    【解决方案2】:
    $p = [PSCustomObject] @{
      Name = "packageName"
      Path = "packagePath"
      Type = "packageType"
      ConnectionManagers = @()
     }
    
    $p.ConnectionManagers += [PSCustomObject] @{
      Name = "managerName"    
      Connection = "connectionString"
     }
    

    使用空的连接管理器列表设置一个包,然后向其中添加一个连接管理器对象。

    如果变量中已有连接管理器列表,请将最后一个赋值中的 [PSCustomObject] 替换为包含要添加的列表的变量

    【讨论】:

    • 谢谢,我认为这是有道理的。假设我已经像上面一样将 $p 创建为自定义对象,并且想添加一个名为“变量”的新数组,我可以这样做还是需要在定义对象时这样做?
    • Mike 在下面的回答是正确的,在我看到之前我要添加的内容!
    • 感谢您的回答,因为它回答了我最初的问题并支持 Mikes 的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    相关资源
    最近更新 更多