我正在使用深度嵌套的JSON,在convertfrom-json之后,需要能够遍历convertfrom-json cmdlet生成的对象的各个部分。
我没有办法提前知道哪些属性名可能在对象内部,也可能不在对象内部,据我所知,有数百种不同的可能属性。幸运的是,我看到的一件有帮助的事情是,我关心的每个属性都是类型“NoteProperty”。
下面是一个例子:
TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
---- ---------- ----------
Equals Method bool Equals(System.Object obj)
GetHashCode Method int GetHashCode()
GetType Method type GetType()
ToString Method string ToString()
definition NoteProperty System.Management.Automation.PSCustomObject definition=@{$schema=https://schema.management.azure.com/providers/Microsof...
integrationAccount NoteProperty System.Management.Automation.PSCustomObject integrationAccount=@{id=[parameters('integrationAccounts_xxx_integration...
parameters NoteProperty System.Management.Automation.PSCustomObject parameters=@{$connections=}
state NoteProperty string state=Enabled
因此,我认为创建一个函数会很简单,该函数将只选择当前正在处理的级别的对象,这些对象为“MemberType”和“NoteProperty”。
我已尝试将对象通过管道传输到:
where-object { $_.MemberType -eq "NoteProperty" }
没有。
我也尝试过各种形式的select-object,但似乎不能选择我需要的东西。我从脚本编写人员那里找到一篇关于使用标签和表达式的老文章-但这似乎有点矫枉过正,不是吗?有人能告诉我选择NoteProperty项的简单方法吗?
谢谢!
3条答案
按热度按时间kyks70gy1#
您可以使用隐藏的
.psobject.properties
来迭代成员。你可以根据需要继续。
kkbh8khc2#
要使用 * 广义 * 解决方案补充Doug Maurer's helpful answer:
下面的代码段定义并调用函数
Get-LeafProperty
,该函数递归遍历对象图-例如ConvertFrom-Json
返回的对象图-并**输出所有 leaf 属性值,沿着它们在层次结构中的 name path*。使用示例:
以上结果为:
kq0g1dla3#
另一种方法是将结果放入一些选择表达式中,然后按此排序。
在您的示例中,您将integrationAccount和parameters作为注解属性,因此,如果它们位于名为$results的pscustomobject中
然后你就可以在上面做一个选择和/或Where-Object。