【问题标题】:Split PSCustomObjects in to strings/array将 PSCustomObjects 拆分为字符串/数组
【发布时间】:2021-05-24 06:18:21
【问题描述】:

嗨,我有每个节点的 n 个对象,如下所示:

NodeName                              : 11111
System.AreaId                         : 2375
System.AreaPath                       : Project
System.TeamProject                    : Project
System.NodeName                       : Project
System.AreaLevel1                     : Project

每个节点都可以有不同的对象。 如何在不指定对象名称的情况下将它们拆分为数组/字符串,以便创建 foreach 单独的对象循环?

【问题讨论】:

  • 您能否编辑您的问题以显示预期的输出?
  • 您可以在 PowerShell 中对任何对象调用 .psobject.Properties 以获取其公共属性的集合。
  • 谢谢@mklement0 我不知道。这就是我想要的。您能否向我推荐 PowerShell 阅读资料,了解类似这样的有用技巧?
  • @Baequiraheal,前段时间我整理了this answer的学习资源列表。从根本上说,学习如何有效地使用 PowerShell 的帮助系统并研究概念性的 about_* 主题会有所帮助,尽管它们并不能说明全部情况。 SO的答案中也有很好的信息。
  • 如果这来自Json 文件,请考虑使用ConvertFrom-Json -AsHashTable 参数,因为它可以让您更轻松地访问密钥。

标签: powershell


【解决方案1】:

mklement0 击败了我要发布的内容。由于我已经起草了代码,我将发布它。

就像 mklement0 在 cmets 中所说,您可以通过使用 .psobject.Properties 访问对象属性。在下面的代码中,我使用 switch 语句来检查对象是否包含特定属性。

$objs = @(
[pscustomobject]@{
    AreaId      = 2375
    AreaPath    = ''
    TeamProject = 'Project2'
    NodeName    = ''
    AreaLevel1  = ''
},
[pscustomobject]@{
    AreaId      = 342
    AreaPath    = ''
    TeamProject = 'Project2'
    Color       = 'Red'
}

)

switch ($objs) {
    { $_.psobject.properties.name -contains 'Color' } {
        'Object contains Color property'
    }
    { $_.psobject.properties.name -contains 'NodeName' } {
        'Object contains NodeName property'
    }
    Default {}
}

【讨论】:

    猜你喜欢
    • 2016-04-01
    • 2012-02-22
    • 1970-01-01
    • 2011-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多