我正在尝试从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命令来做到这一点?
答案 0 :(得分:2)
使用计算出的属性来扩展嵌套对象的属性:
$data |
Select-Object -Expand value |
Select-Object subject, @{n='start';e={$_.start.dateTime}},
@{n='end';e={$_.end.dateTime}}, IsAllDay, ResponseStatus