History of a calendar item

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:



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.

4 thoughts on “History of a calendar item

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s