【问题标题】:Get Values From Object as array in Powershell从对象中获取值作为Powershell中的数组
【发布时间】:2020-04-11 12:33:31
【问题描述】:

我有一个带有属性和值的 PSCustomObject。我的目标是快速将值放入数组中。我对 powershell 还很陌生,所以我不确定这是否可以在一行中完成。

我的对象:

object
  propA  : valA
  propB  : valB
  propC  : valC

我想尽可能快地获得一个仅包含值的数组,理想情况下这不会涉及循环,因为此过程将执行数千次。

valArray
  valA, valB, valC


我已经尝试了几件事。 $object | ft -HideTableHeaders 似乎让我接近我想要的,但它似乎没有返回一个数组

【问题讨论】:

  • 您尝试过哪些代码或在 SO 上针对您的问题进行了哪些搜索? SO 用户没有在请求者不付出任何努力的情况下编写代码的习惯。请编辑您的问题以符合预期的MRE,我们将尽可能提供帮助。
  • 我现在添加了一些接近我想要的结果的内容。我了解您希望看到我在询问之前进行了研究,但我认为列出一堆死胡同的结果并不富有成效。

标签: arrays powershell properties


【解决方案1】:

另一个 Oneliner:

$variable = $object[0..$object.Count]

【讨论】:

    【解决方案2】:

    不使用循环你可以这样做:

    $valArray = ($object.PSObject.Properties).Value
    

    给你一个值数组

    ValA
    ValB
    ValC
    

    【讨论】:

      【解决方案3】:

      这是我遵循不使用循环准则的方法,即使我会使用循环。

      $object = [pscustomobject]@{
      propA = 'ValA'
      propB = 'ValB'
      propC = 'ValC'
      propD = 'ValD'
      propE = 'ValE'
      }
      
      [array]$Array123 = (($object | get-member -MemberType NoteProperty).definition).split("=")
      [array]$Array123 = [array]$Array123 -replace "^string.*$","" | ? {$_} 
      [array]$Array123
      

      所以我制作了一个名为 $object 的虚拟对象。然后我在 $Array123 上使用了类型加速器 [array],因此 powershell 知道我正在寻找使用“=”符号右侧的命令创建一个数组。我在对象上使用get-member 来获取NoteProperties,然后我将定义对象拆分为等号。

      这将创建一个如下所示的数组。

      string propA
      ValA
      string propB
      ValB
      string propC
      ValC
      string propD
      ValD
      string propE
      ValE
      

      然后我正则表达式删除以“字符串”开头的行......最后管道到? {$._} 以删除我们用正则表达式清空的行。

      在我们的正则表达式之后,数组将如下所示:

      ValA
      ValB
      ValC
      ValD
      ValE
      

      我怀疑这是否比简单的 foreach 循环更快,但它确实属于您的 no loop in the answers 规则。

      【讨论】:

        猜你喜欢
        • 2022-01-01
        • 1970-01-01
        • 2021-03-04
        • 1970-01-01
        • 2021-09-13
        • 1970-01-01
        • 2016-12-24
        • 2017-10-06
        相关资源
        最近更新 更多