【问题标题】:Accessing nested objects in PowerShell在 PowerShell 中访问嵌套对象
【发布时间】:2019-01-23 20:26:32
【问题描述】:

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

我已经在 PowerShell 中使用了这个命令来获取初始数据

$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 变量中的每个项目,以获得一个不错的事件列表。

$data |
    ForEach-Object {$_.value} |
    Select -Property subject, start, end, IsAllDay, ResponseStatus

输出:

主题:今天的活动 开始:@{dateTime=2019-01-18T11:00:00.0000000; timeZone=GMT 标准时间} 结束:@{dateTime=2019-01-18T11:30:00.0000000; timeZone=GMT 标准时间} isAllDay : 假 响应状态:@{响应=无;时间=0001-01-01T00:00:00Z} 主题:明天的活动 开始:@{dateTime=2019-01-18T09:45:00.0000000; timeZone=GMT 标准时间} 结束:@{dateTime=2019-01-18T12:15:00.0000000; timeZone=GMT 标准时间} isAllDay : 假 响应状态:@{响应=无;时间=0001-01-01T00:00:00Z}

我想要的是在startend 对象中选择dateTime 数据,使其看起来像这样:

主题:今天的活动 开始:2019-01-18T11:00:00.0000000 结束 : 2019-01-18T11:30:00.0000000 isAllDay : 假 响应状态:@{响应=无;时间=0001-01-01T00:00:00Z} 主题:明天的活动 开始:2019-01-18T09:45:00.0000000 结束 : 2019-01-18T12:15:00.0000000 isAllDay : 假 响应状态:@{响应=无;时间=0001-01-01T00:00:00Z}

我可以使用命令在 PowerShell 窗口中执行此操作

$data.value.[0].start.dateTime

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

【问题讨论】:

    标签: powershell


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-11-09
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多