Powershell如何从嵌套哈希表中提取哈希表值

时间:2020-05-29 18:29:47

标签: powershell hash

我向ManageEngine技术支持数据库发出了API请求,该请求返回一个JSON响应,该响应作为以下三个哈希表的自定义对象返回:$ result.response_status,$ result.list_info和$ result .requests其中的第三个包含我要查找的数据。

$results.requests.id一个整数

$results.requests.subject一个字符串

$results.requester哈希表。

请求者哈希表为@requester{name= 'Martin Zimmerman'; email='mzimmer@company.com'}

我想做的是:

$results.requests | select id, subject, requester.name  

仅显示一行ID,主题和请求者的姓名

id   subject         name
--   --------------  --------------
3329 Can't open file Martin Zimmerman 

但是,我无法弄清楚提取请求者哈希表中名称键值的术语。

2 个答案:

答案 0 :(得分:1)

我想这就是你想要的。您需要构建一个Calculated Property(示例10)。

$results.requests | Select-Object id,subject,@{l='name';e={$_.requester['name']}}

这种方法允许您从哈希表中调用名称键。

编辑

如果您的requester项目是PSCustomObject,请尝试此操作。

$results.requests | Select-Object id,subject,@{l='name';e={$_.requester.name}}

使用类似的对象结构进行测试。

$results = New-Object psobject
$requests = New-Object psobject
$requests | Add-Member -MemberType NoteProperty -Name id -Value 2
$requests | Add-Member -MemberType NoteProperty -Name subject -Value "lol"
$hash = @{}
$hash.Add("email","mzimmerman@company.com")
$hash.Add("name","Martin Zimmerman")
$requests | Add-Member -MemberType NoteProperty -Name requester -Value $hash
$results | Add-Member -MemberType NoteProperty -Name requests -Value $requests
$results.requests | select id,subject,@{l='name';e={$_.requester['name']}}

id subject name
-- ------- ----
 2 lol     Martin Zimmerman

答案 1 :(得分:0)

啊... 非常感谢您的答复,实际上,在我重新开始之后,第一个衬套确实可以使用计算所得的属性正确工作。

$results.requests | Select-Object id,subject,@{l='name';e={$_.requester.name}}

我认为我的问题可能是:

我最终将API调用的输出存储为字符串,或者我引用了另一个变量。简而言之……对我而言,这是一个非常愚蠢的错误。有趣的是计算属性的整个概念……我以前从未遇到过。非常感谢您的帮助!