【问题标题】:Powershell - Getting multiple values from a nested objectPowershell - 从嵌套对象中获取多个值
【发布时间】:2016-12-28 12:43:12
【问题描述】:

我确信这是一个非常基本的 PowerShell 问题,但我有一个 JSON 文件,我正在使用 ConvertFrom-Json 将其加载到 PowerShell 自定义对象中,以下 select-object 有效

$JsonContent.value | Select-Object -Property Name, @{Name = 'commit'; Expression = { $_.commit.author.date }}

我正在尝试在嵌套提交对象中获取另一列,但以下内容不起作用,所以希望有人能帮助我弄清楚如何从嵌套提交对象中获取第二个值(我尝试了一些变体,但没有工作)

JsonContent.value | Select-Object -Property Name, @{Name = 'commit'; Expression = { $_.commit.author.date}, {$_.commit.commitId}}

谢谢

斯科特

【问题讨论】:

    标签: json git rest powershell tfs


    【解决方案1】:

    Expression = ... 之后的部分是一个包含代码的脚本块,所以如果你想返回一个值数组作为属性 commit 的值,那么只需修改

    Expression = { $_.commit.author.date}, {$_.commit.commitId}  
    

    Expression = { $_.commit.author.date, $_.commit.commitId}
    

    这样您就可以使用逗号运算符创建并返回您的 2 元素数组


    可能您更愿意制作一些代表提交的漂亮字符串,例如

    Expression = { "{0} - {1}" -f $_.commit.author.date, $_.commit.commitId }
    

    如果您希望 commitId 在完全不同的列中,只需像这样添加另一个属性

    ... -Property Name, @{Name = 'commit'; Expression = { $_.commit.author.date}}, @{Name = 'commitId'; Expression = {$_.commit.commitId}} 
    

    【讨论】:

    • 我之前确实让它工作,但它返回它就像你在一个包含两个值的单列数组中所说的那样。我原始选择中的两列具有名称和提交。有没有办法让它进入自己的列,这样我就可以有一个名称、提交和 commitID 列?例如,选择对象中是否可以有另一个名称/表达式?
    • 谢谢,效果很好 - 不知道我尝试了这么多变种是怎么漏掉的
    • 相关问题 - 如何在日期上使用 where 子句?我尝试了一些变体 | where-object ($_.commit.author.date -lt "2016-08-10") 另外,我怎样才能遍历这个对象?我可以做一个 foreach 吗?如何访问每一列数据?
    • 您可以像往常一样使用Where-Object,但请注意,在这种情况下,日期是一个字符串,因此您可能首先要将其转换为datetime。关于如何动态访问对象的所有属性,您可能想看看Get-Member
    • 您能否为 where-object 和 get-member 提供一些关于如何使用它们的帮助/示例?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-11
    • 2021-11-29
    • 2016-10-31
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多