我使用以下命令将JSON文件转换为PSObject:
$json = Get-Content $filepath -Raw | ConvertFrom-Json
下面是PSObject中当前内容的一个示例:
Value : Production
MemberType : NoteProperty
IsSettable : True
IsGettable : True
TypeNameOfValue : System.String
Name : Environment
IsInstance : True
我知道您可以通过使用以下命令来获得它的价值:
$json.psobject.properties["Environment"].Value
这将返回“Products”
问题:
有没有一种方法可以根据值返回名称,就像我可以像上面所示那样根据名称返回值?
即如何退还Environment?
作为后台,我正在编写一个脚本,该脚本将遍历所有值,如果值为空,则需要打印名称。
1条答案
按热度按时间9wbgstp71#
在Theo的帮助下,您已经找到了解决方案,但让我用一些背景信息来详细说明:
注:
psobject
属性,这是一个丰富的反射来源,例如通过.psobject.Properties
对给定对象的属性进行反射,以及用于筛选的内在.Where()
方法(Where-Object
cmdlet的一个性能更好、功能更丰富的替代方案)。代码仅适用于从JSON解析的对象的顶级属性。如果您需要搜索整个对象*图,即嵌套对象,以查找层次结构中任何级别的值,则需要付出更多努力。
下面的示例假定已经定义了函数
Get-PropertyPathByValue
(见下文):Get-PropertyPathByValue
源码-注意可以搜索的值类型限制: