在PowerShell中访问嵌套对象

时间:2019-01-23 12:19:44

标签: powershell

我正在尝试从PowerShell对象提取特定值以创建CSV以便在另一个应用程序中使用。更具体地说,我使用Microsoft Graph API在指定的时间范围内下载日历中的事件。

我已在PowerShell中使用此命令来获取初始数据

services:
    mon: 3 daemons, quorum ...
    mgr: tb-ceph-1-prod(active)
    osd: 4 osds: 4 up, 4 in
    rgw: 4 daemons active

从这里,我可以访问$data = Invoke-RestMethod -Uri "https://graph.microsoft.com/v1.0/users/{username}/calendar/events?startDateTime=2019-01-01T00:00:00.0000000&endDateTime=2019-01-30T23:59:00.0000000&select=subject,start,end,IsAllDay,ResponseStatus" 变量中的每个项目,以获取详细的事件列表。

$data

输出:

subject        : Event today
start          : @{dateTime=2019-01-18T11:00:00.0000000; timeZone=GMT Standard Time}
end            : @{dateTime=2019-01-18T11:30:00.0000000; timeZone=GMT Standard Time}
isAllDay       : False
responseStatus : @{response=none; time=0001-01-01T00:00:00Z}

subject        : Event tomorrow
start          : @{dateTime=2019-01-18T09:45:00.0000000; timeZone=GMT Standard Time}
end            : @{dateTime=2019-01-18T12:15:00.0000000; timeZone=GMT Standard Time}
isAllDay       : False
responseStatus : @{response=none; time=0001-01-01T00:00:00Z}

我想要在$data | ForEach-Object {$_.value} | Select -Property subject, start, end, IsAllDay, ResponseStatus dateTime对象中选择start数据,因此看起来像这样:

subject        : Event today
start          : 2019-01-18T11:00:00.0000000
end            : 2019-01-18T11:30:00.0000000
isAllDay       : False
responseStatus : @{response=none; time=0001-01-01T00:00:00Z}

subject        : Event tomorrow
start          : 2019-01-18T09:45:00.0000000
end            : 2019-01-18T12:15:00.0000000
isAllDay       : False
responseStatus : @{response=none; time=0001-01-01T00:00:00Z}

我可以在PowerShell窗口中使用以下命令进行操作

end

但是如何使用上面的select命令来做到这一点?

1 个答案:

答案 0 :(得分:2)

使用计算出的属性来扩展嵌套对象的属性:

$data |
    Select-Object -Expand value |
    Select-Object subject, @{n='start';e={$_.start.dateTime}},
        @{n='end';e={$_.end.dateTime}}, IsAllDay, ResponseStatus