3

I am trying to extract specific values from a PowerShell object to create a CSV to use in another application. More specifically I have used the Microsoft Graph API to download events in a calendar over a set time frame.

I have used this command in PowerShell to get the initial data

$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"

From here I can access each item in the $data variable to get a nice list of events.

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

Output:

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}

What I would like is to select the dateTime data in start and end objects so it looks like this:

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}

I can do this in the PowerShell window with the command

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

but how can I do this with the select command above?

1 Answer 1

4

Use calculated properties for expanding properties of the nested objects:

$data |
    Select-Object -Expand value |
    Select-Object subject, @{n='start';e={$_.start.dateTime}},
        @{n='end';e={$_.end.dateTime}}, IsAllDay, ResponseStatus
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.