There are always issues with appointments, meeting requests and meeting series with delegates or mobile devices. Sometimes appointments disappear, got shifted or updates don’t make it to all involved parties.
In the past I opened a case with Microsoft and get these issues analyzed. But this is very time intensive and often the affected users are VIPs, which want to have as quick as possible a report about what happened.
I spent some time on this topic and I wrote about it here. I also wrote my script to pull all the relevant data from mailboxes in a way, which is much faster and has more capabilities. You can read more about this script here. This script was recently updated to translate the properties PidLidClientIntent and PidLidChangeHighlight in a human readable format. You can read more about it here.
In this post I will go through the history of a calendar item. There will be several changes and I will show what happened with each change. I know that this post has a lot of pictures, but to get an understanding what exactly happens, pictures are sometimes a better way to explain something.
In this scenario we have a manager and its delegate:
- Manager: Ingo Gegenwarth
- Delegate: Susan Smith
The delegate will create an appointment, which will be changed several times.
Delegate created a single appointment in manager’s calendar
Delegate added an attendee and location
Attendee accepted meeting invitation
Manager updated the appointment to recurring meeting series
Delegate modified the body of the recurring meetings series
Attendee accepted the new invite
Delegate deleted one occurrence
Manager shifted one occurrence
Attendee declined and proposed a new time for the shifted occurrence
Manager accepted proposed time
Delegate changed recurring meeting series end date
Manager canceled meeting series on mobile device
In all steps I used the script with the following parameters:
$CalHistory=C:\temp\Scripts\Get-CalendarItems_gallery.ps1 -EmailAddress , -Subject 'Exchange 2016' -AllItemProps -Credentials
By default and as shown here, the script sorts the output by LastModifiedTimeUTC, but you can also sort by DateTimeCreatedUTC.
To pipe the used variable $CalHistory into Grid-View I used the following command:
$CalHistory | select * -ExcludeProperty item,*id | ogv
The output is an array of objects. When you use the switch AllItemProps, you will get the appointment as an object. This means you can also check the body, if you experience any issues here (e.g.: conversion issue through EWS clients like Mac).
You just have to reference the body property of an item:
But there are more properties available, depending on the IPM ItemClass :
As mentioned before the script has some more capabilities compared to the built-in CmdLet:
- search by subject must NOT be the exact subject like in the built-in command Get-CalendarDiagnosticLog
- you can search on multiple criteria (e.g.: Subject, CleanGlobalObjectID, GlobalObjectID)
- almost all MAPI properties will be returned (e.g.: body of an item)
- the properties PidLidClientIntent and PidLidChangeHighlight will be translated into human readable format
I also want to highlight the requirements of the script:
- You need to have Microsoft Exchange Web Services (EWS) installed
- You should have the role ApplicationImpersonation or you will need FullAccess on the mailboxes you want to scan
- The script could be downloaded here
If you often have to deal with calendar issues I encourage you to play with this. It makes sense to see what in a good trace happens, as sometimes issues occur due to the fact that some clients not did what they supposed to do. I hope this helps.