无法在PowerShell中解析多行数组

时间:2016-11-21 06:16:28

标签: powershell

我的aws cli返回带有嵌套哈希的多行数组,我无法解析输出以从中获取适当的值

>Write-Host $a
[
  [
     [
         {
             "VolumeID": "vol-fxxxxxx"
         }
     ]
   ]
]

如果我做$ a [0],它会返回第一行,即" ["与增量索引相同。 我如何解析这个数组并从中获取volumeID? 谢谢

其他详情:

感谢您的宝贵答案。以下是上述对象的类名:

> $a.getType()                                                                                                          
IsPublic IsSerial Name                                     BaseType                                                                                                             
 -------- -------- ----                                     --------                                                                                                             
True     True     Object[]                               System.Array

> $a | Where-Object ($_ -like "*Volume*")

> $a | ConvertFrom-Json
 ConvertFrom-Json : Invalid JSON primitive: 
 Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData.
 At line:1 char:6


 + $a | ConvertFrom-Json
 +      ~~~~~~~~~~~~~~~~
 + CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
 + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

嗨Martin Brandl,TessellatingHeckler我已经更新了你的问题,请你帮我解决一下。 谢谢

2 个答案:

答案 0 :(得分:2)

  

与增量索引相同

我无法理解执行相同的增量索引,并返回第一行,但它看起来像是:

多行字符串($a.gettype()Name: String):

$b = $a | ConvertFrom-Json
$b[0][0][0].VolumeID

或者,一个字符串数组($a.gettype() Name is Object[] or String[]),首先执行此操作,然后从JSON转换:

$a = -join $a

答案 1 :(得分:0)

您可以使用where-object cmdlet。

$a | where-object {$_ -like "*Volume*"}

有关where-object cmdlet的更多信息,请访问:https://technet.microsoft.com/en-us/library/ee177028.aspx

谢谢,蒂姆。