从参数中的路径获取PowerShell对象属性

从参数中的路径获取PowerShell对象属性,powershell,object,Powershell,Object,如何配置PowerShell以根据变量的内容选择顶级或嵌套的对象属性 我有一个PowerShell脚本,它读取JSON文件的内容,将其转换为对象,然后选择其中一个属性。但是,内容不一致,所需属性在JSON中的位置可能会更改 我希望能够在脚本上设置一个-PropertyPath参数,使用户能够在对象中传递所需属性的路径 以下面的示例为例,它允许基于-PropertyPath的值选择对象属性。它之所以有效,是因为属性未嵌套 $PropertyPath= "myProperty" $definitio

如何配置PowerShell以根据变量的内容选择顶级或嵌套的对象属性

我有一个PowerShell脚本,它读取JSON文件的内容,将其转换为对象,然后选择其中一个属性。但是,内容不一致,所需属性在JSON中的位置可能会更改

我希望能够在脚本上设置一个-PropertyPath参数,使用户能够在对象中传递所需属性的路径

以下面的示例为例,它允许基于-PropertyPath的值选择对象属性。它之所以有效,是因为属性未嵌套

$PropertyPath= "myProperty"
$definition = (Get-Content -Path $definitionFilePath -Raw | ConvertFrom-Json).$PropertyPath
现在,以下面失败的示例为例,其中要获取的属性是嵌套的,并且确实存在,这将失败,没有错误,但是$definition是空的——可能是因为名为random.myProperty的属性不存在

$PropertyPath= "random.myProperty"
$definition = (Get-Content -Path $definitionFilePath -Raw | ConvertFrom-Json).$PropertyPath

任何帮助都将不胜感激。

点“.”属性表示。Powershell似乎将整个字符串视为属性名

获得所需功能的一种方法:使用辅助函数手动解析和遍历路径:

JSON输入文件:

{ 
    "stuff": {
        "onetype": [
            {"id":1,"name":"John Doe"},
            {"id":2,"name":"Don Joeh"}
        ],
        "othertype": {"id":2,"company":"ACME"}
    }, 
    "otherstuff": {
        "thing": [[1,42],[2,2]]
     }
}
输出:

id name    
-- ----    
 1 John Doe
 2 Don Joeh

当您开始谈论对象和路径时,为什么不使用XML?如果您同时需要get/set功能,这个答案有一个递归的含义:
id name    
-- ----    
 1 John Doe
 2 Don Joeh