【发布时间】:2020-10-03 17:26:12
【问题描述】:
我正在使用深度嵌套的 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" }
没有。
我也尝试过各种形式的选择对象,但似乎无法选择我需要的东西。我从脚本专家那里找到了一篇关于使用标签和表达式的旧文章——但这似乎有点矫枉过正,不是吗?有人可以指出我只选择 NoteProperty 项目的简单方法吗?
谢谢!
【问题讨论】:
-
看看大多数powershell对象的隐藏
.PSObject属性。它包含一个名为.Properties的属性,它将为您提供对象的所有道具......并且您可以遍历它们。如果您需要深入研究子属性,那么您可能会发现在原始 JSON 上使用正则表达式更容易... [sigh ...] -
另一种方法是使用 Get-Member -MemberType NoteProperty 来获取属性名称。不过,我认为 PSObject.Properties 更有意义。
-
@Lee_Dailey 非常感谢!是的,这是一个很好的解决方案,感谢您的建议,我重新启动并运行。谢谢!
-
@Indrid - 酷!很高兴能帮上一点忙……[grin]