Troubleshooting calendar items

In the past few month the number of incomming request related to calendar issues increased. There are several reasons for this like message body truncation, Richt text or HTML formated messages get converted to plain text. Those are most likely related to iOS devices and there is a KB available for this here.

But not only iOS is causing issues. Especially when it comes to delegate scenarios with more than one delegate and when all of them have multiple clients with different versions (e.g.: Outlook 2010/2013, Outlook for Mac and a whole bunch of mobile devices).

To get to a point: Just ignored the following recommendations

But how do you troubleshoot those issues? There are several techniques and I will cover some of them in this post:

Update 26.05.2015

Update 09.06.2016

What you are looking for

When you start analysing calendar items it all comes down to a few properties of those items, which helps you to find the what, who, when and which client. The following list is the attributes (at least I’m using for analysis):

Property

Description

PidTagLastModificationTime The time the item was last modified.
PidTagLastModifierName The user who modified the item.
PidLidCleanGlobalObjectId The unique GOID across multiple mailboxes. This is the most important unique identifier especially for recurrent appointments!
PidLidGlobalObjectId The GOID of an item.
 0x8059001E This extended property records the client, which modified the item.
 0x8054001E This extended property records the last action performed on the item.

Your options:

In Exchange 2013

When you are on Exchange 2013 then you really have the best out-of-the-box options. You can export the diagnostic logs using the CmdLet Get-CalendarDiagnosticLog and take advantage of the CmdLet Get-CalendarDiagnosticAnalysis.

In Exchange 2010

With Exchange 2010 you can get the dignostic logs like in Exchange 2013 with the CmdLet Get-CalendarDiagnosticLog, but you cant take advantage of the CmdLet Get-CalendarDiagnosticAnalysis like in Exchange 2013.

How does it looks like?

You can always use MFCMAPI to examine the properties. Here is an example how it looks like when you open a mailbox and check the properties of an item

CalDiag01

In Exchange 2013 you can use the previous mention CmdLets and create either a HTML report or a CSV file, which could be analysed in Excel or your favorite tool.

Example #1

In this example I’m analyzing an appointment with the subject “Troubleshoot calendaritems 01”:

Get-CalendarDiagnosticLog -Identity ingogege -Subject 'Troubleshoot calendaritems 01' -LogLocation C:\Temp

CalDiag02

You will find the output in the folder I specified

CalDiag03

Now use Get-CalendarDiagnosticAnalysis and analyse the gathered log

Get-CalendarDiagnosticAnalysis -LogLocation 'C:\Temp\Ingo Gegenwarth' -DetailLevel Advanced >C:\Temp\CalDiag01.csv

in this case we have a CSV file as output, which looks like this

Import-Csv C:\Temp\CalDiag01.csv | Out-GridView

CalDiag04

Well, okay this one doesn’t look really interesting as not much happened. But this was just a simple example. Let’s see how it looks in the second one.

Example #2

In this example we have a manager/delegate scenario. Mickey is the delegate of Ingo and setup a meeting series with Han.

First step is to extract the calendar items from all involved mailboxes

Get-CalendarDiagnosticLog -Identity ingogege -Subject 'Troubleshoot calendaritems 02' -LogLocation C:\Temp
Get-CalendarDiagnosticLog -Identity mickeygege -Subject 'Troubleshoot calendaritems 02' -LogLocation C:\Temp
Get-CalendarDiagnosticLog -Identity hansolo -Subject 'Troubleshoot calendaritems 02' -LogLocation C:\Temp

In the next step let Exchange analyse the items and create a HTML report

Get-CalendarDiagnosticAnalysis -LogLocation 'C:\Temp\Ingo Gegenwarth' -DetailLevel Advanced -OutputAs HTML >C:\Temp\ingo.html
Get-CalendarDiagnosticAnalysis -LogLocation 'C:\Temp\Mickey Gegenwarth' -DetailLevel Advanced -OutputAs HTML >C:\Temp\mickey.html
Get-CalendarDiagnosticAnalysis -LogLocation 'C:\Temp\Han Solo' -DetailLevel Advanced -OutputAs HTML >C:\Temp\han.html

Alternatively create a CSV file and open it in Excel

Get-CalendarDiagnosticAnalysis -LogLocation 'C:\Temp\Ingo Gegenwarth' -DetailLevel Advanced >C:\Temp\ingo.csv
Get-CalendarDiagnosticAnalysis -LogLocation 'C:\Temp\Mickey Gegenwarth' -DetailLevel Advanced >C:\Temp\mickey.csv
Get-CalendarDiagnosticAnalysis -LogLocation 'C:\Temp\Han Solo' -DetailLevel Advanced >C:\Temp\han.csv

As you can see you will get detailed information when, who and which client modified the items and much more for each mailbox

HTML reports

CalDiag05

CalDiag06

CalDiag07

and here the CSV imported into Excel

CalDiag08

CalDiag09

CalDiag10

You really get a full set of information and I recommend to go with the CSV files.

Note: The CmdLet Get-CalendarDiagnosticAnalysis is currently only available within Exchange 2013 on-prem. Neither in Exchange 2010 nor in EXO!

This is really a huge step forward. Nevertheless I run into the issue that I don’t have the CmdLet available to work on all those incoming requests. The only way was to gather the logs and then use MFCMAPI to check each item…..as you can imagine this is very time consuming.

Therefore I wrote a script using EWS, which will get all the details for me:

Get-CalendarItems.ps1

What do you need to run the script?

The script accepts the following parameters:

Parameter

Description

EmailAddress The e-mail address of the mailbox, which will be checked. The script accepts piped objects from Get-Mailbox or Get-Recipient.
Credentials Credentials you want to use. If omitted current user context will be used.
Impersonate Use this switch, when you want to impersonate.
Subject Use a string as a filter to search for. Cannot be combined with CleanGlobalObjectID or GlobalObjectID.
StartDateLastModified Filter for items, which have been modified after this date. The parameter needs to be a type of [datetime]. You can combine this with EndDateLastModified to filter for a range.
EndDateLastModified Filter for items, which have been modified before this date. The parameter needs to be a type of [datetime]. You can combine this with StartDateLastModified to filter for a range.
CleanGlobalObjectID When you know the ID (e.g.: using MFCMAPI), you can search for it. Cannot be combined with Subject or GlobalObjectID.
GlobalObjectID When you know the ID (e.g.: using MFCMAPI), you can search for it. Cannot be combined with Subject or CleanGlobalObjectID.
CalendarOnly By default the script will enumerate all folders. If you want to limit to folders with type “IPF.Appointment” use this switch.
Server By default the script tries to retrieve the EWS endpoint via Autodiscover. If you want to run the script against a specific server or endpoint, just provide the name in this parameter. Not the URL!
AllFolders By this all folders under MsgRootFolder will be searched
AllItemProps All properties of an item will be returned
TrustAnySSL Switch to trust any certificate.
DateFormat By default the script enumerates the current culture and the datetime format. It will then append the milliseconds to it. If you want to specify your own format (e.g.:’yyyyMMdd hhmmssfff’) use this.

This is the default output

Output

Description

LastModifiedTimeUTC The time when the item was last changed in UTC format.
Mailbox The mailbox where this item was found. Helps you when you searched multiple mailboxes.
LastModifiedName The name of the user who modified the item.
Subject The subject of the item.
Client The client, which modified the item.
FolderPath The path of the folder where the item was found.
Action The action performed on the item.
Start Starting date of the item.
End Ending date of the item.
ItemClass ItemClass of the item.
CleanGlobalObjectID CleanGlobalObjectID of the item.
Organizer Organizer of the item.
RequiredAttendees RequiredAttendees of the item.
OptionalAttendees OptionalAttendees of the item.
IsRecurring Is the item a recurring one?
DateTimeCreated When was the item created.
DateTimeReceived When was the item received.
DateTimeSent When was the item sent.
FolderID EWS FolderID of the item.
GlobalObjectID GlobalObjectID of the item.

When you use the switch AllItemProps you will get the following output

Enhanced Output

Description

LastModifiedTimeUTC The time when the item was last changed in UTC format.
Mailbox The mailbox where this item was found. Helps you when you searched multiple mailboxes.
Item The item itself as an object.
LastModifiedName The name of the user who modified the item.
Subject The subject of the item.
 
FolderPath The path of the folder where the item was found.
Client The client, which modified the item.
Action The action performed on the item.
ItemClass ItemClass of the item.
Start Starting date of the item.
End Ending date of the item.
IsRecurring Is the item a recurring one?
PidLidClientIntent The converted value of this property. You can look-up the meaning here.
CleanGlobalObjectID CleanGlobalObjectID of the item.
GlobalObjectID GlobalObjectID of the item.
HexItemEntryId This is the converted ItemEntryID. The given ID could be used to search history table like described here. But this is very, very special!
ModifiedOccurences All modified occurences of a recurrent meeting
DeletedOccurences All deleted occurences of a recurrent meeting

By default the script is searching the following folders:

  • all folders with the folderclass “IPF.Appointment”
  • WellKnownFolders: Inbox,SentItems,RecoverableItemsRoot
  • all subfolders under the WellKnownFolder RecoverableItemsRoot except “Audits”

If you use the switch -CalendarOnly only the folders with the folderclass  “IPF.Appointment” will be searched.

When you select -AllFolders, the script will extend the default selection and search all found folders under MsgFolderRoot.

How it looks in action?

I take the second example. We have 3 people involved: Ingo, Mickey and Han.

First put their primary SMTP addresses into an array

[array]$mbs = "ingogege@adatum.com","mickeygege@adatum.com","hansolo@adatum.com"

Then search those mailboxes for items with the string ‘calendaritems 02’ in the subject

$basic=.\Get-CalendarItems.ps1 -EmailAddress $mbs -Impersonate -Subject 'calendaritems 02'

now you can look at all the versions in all the mailboxes what exactly happened

CalDiag11

as you can see you will get from all mailboxes the data into one single file in order of what happened. Several clients e.g.: OWA, ActiveSync were involved. But you can even more data. Now I’m searching for the PidCleanGlobalObjectID and use also the switch -AllItemProps

$enhanced= .\Get-CalendarItems.ps1 -EmailAddress $mbs -Impersonate -CleanGlobalObjectID 040000008200E00074C5B7101A82E00800000000F0838A8F1882D001000000000000000010000000099DC0EA675D1A4CA9BB87AF552001AB -AllItemProps

The script will now gather allmost all properties of the items

CalDiag12

as the script adds the items itself as an object to the output you can examine all the properties. Take item number 8 from the result

CalDiag13

let’s have a look at the ModifiedOccurrences

CalDiag14

the occurence on the 6/26/2015 was changed from starting time 10:00 AM to 07:00 PM and looking at the following screenshot you see that this change was sent by the user Ingo Gegenwarth using Outlook (Client=MSExchangeRPC) at 08:18:01.529 AM

CalDiag15

I know this is not easy to read. Here is another example.

Real life example

A user complaint that he had a wrong date in his calendar than the organizer. The organizer had the 13.04.2015 in his calendar, while the attendee had the 15.04.2015. I extracted all the items from their mailboxes and started analyzing it in Excel. I marked organizers items yellow 

CalDiag16

so as I used the switch -AllItemProps, I have the items itself as an object. I also piped the result into a variable $organizer and now I can easily compare what the difference is of the property ModifiedOccurrences

CalDiag17

as you can see the ActiveSync client reverted the change and caused the discrepancy between the organizer and attendee.

Conclusion

When it comes to a support case you will use the build-in CmdLets mentioned above. If you want to analyze some issues by yourself, I would use the script as it gives you a better overview and it’s order by time. The script has also some disadvantages as you will need to have special permissions and EWS Api installed. But it also has some advantages as you can really extract almost all properties (e.g.: body of an item), which the CmdLets don’t do.

Happy analyzing!

Update 26.05.2015:

I was approached by a few colleagues and other peoples, which used the script to troubleshoot some calendar issues. The issue they were facing was that they couldn’t get any entry for the client or for the action, which was performed on the item.

In all cases the property CalendarVersionStoreDisabled of those mailboxes was set to $True. In order to get those extende MAPI properties written and to get the different versions of the item logged you need to make sure that this value is set to $False, which is the default.

From my experience with the last cases of calendar item issues I also change the script as follows:

  • I predefined the parameter DateFormat with the value “yyyyMMdd HHmmssfff” in order to have a better sorting in e.g.:Excel
  • When you use the switch AllItemProps now the script reports all ModifiedOccurences and DeletedOccurrences, which makes it easier to troubleshoot recurrent meetings

Update 09.06.2016:

Initial the script did not include a few IPM item classes in the search in order to have a better overview. Now those are included:

  • IPM.Schedule.Meeting.Canceled
  • IPM.Schedule.Meeting.Request
  • IPM.Schedule.Meeting.Resp.Neg
  • IPM.Schedule.Meeting.Resp.Pos
  • IPM.Schedule.Meeting.Resp.Tent

Besides this the property Appointment.Recurrence is now converted in a string and available in the output, when the switch is used AllItemProps:

CalDiag18.PNG

This is a result of an increasing number of reportes issues of meeting cancelation.

Advertisements

39 thoughts on “Troubleshooting calendar items

  1. Thanks for the great EWS script. This will be really useful as we use Office 365-Dedicated service with Exchange 2010 and it seems that we cannot use the Get-CalendarDiagnosticLog cmdlet – at least it never works for us. We have to contact Microsoft Support Online each time and ask them to run the cmdlet to extract the logs – I guess because our only admin access is via Remote PowerShell into the Office 365 Exchange servers. Can you explain what exactly the script is doing? Is it extracting the diagnostic logs directly from the mailbox (I see there’s a “Calendar Logging” folder in the Recoverable Items folder in MFCMAPI), e.g. it is an alternative to the official cmdlet? Also I wonder if you have seen an issue that we are now experiencing almost on a weekly basis with our Managers and Delegates… Suddenly the meeting event created by the delegate disappears from the manager’s calendar, but it is still visible in the invitees’ calendars. When we investigate via MFCMAPI we find that the item is still in the Calendar folder but somehow the ItemClass has changed from “IPM.Appointment” to “IPM.Note” and this stops the item from displaying in the calendar properly. If we change the item class back to “IPM.Appointment” using MFCMAPI it generally fixes the issue. Just wondered if you have any thoughts on this? We are getting more and more of these issues but we cannot reproduce it and we cannot find any reason for it. Some users have mobile devices and some don’t. The only common thread is that it’s always a manager/delegate scenario. We have opened multiple tickets with Microsoft and they have not been able to identify the issue. Thanks!

    Like

    • Hi Stuart,
      as described above the script searches by default the following folders:
      ◾all folders with the folderclass “IPF.Appointment”
      ◾WellKnownFolders: Inbox,SentItems,RecoverableItemsRoot
      ◾all subfolders under the WellKnownFolder RecoverableItemsRoot except “Audits
      Unless you are using the switch “AllFolders”. In general only items with the class IPM.Appointment are searched.
      You can add additional filters like DateTime, Subject and GOID.
      In the end it works very similar like the native Exchange CmdLet, but uses EWS to retrieve the MAPI properties. And when you are using the switch “AllItemProps” you get also the whole item as object back. Here you can also examine the body for instance(just in case a mobile device truncated it!).
      As the script filters for the IPM.Appointment class it won’t detect the issue you are facing. Before you fix the item have a look at the MAPI property 0x8059001E, which tells you the client. Maybe this gives you a hint.
      In general I’m seeing a lot of mobile devices are changing appointments, especially recurrent once.
      I hope this helps!
      Ciao,
      Ingo

      Like

  2. Thanks for the detailed info and suggestions Ingo. We’ll certainly take a look at MAPI property 0x8059001E next time we’re see an IPM.Appointment change to IPM.Note. Thanks again.

    Like

  3. Hi,

    I’m a mamber of “Organization Management” RBAC group, so I should have rights to impersonate all mailboxes, and I’ve addeed Full Access rights to one test mailbox, but I get this error when try to run your script:

    Exception calling “FindFolders” with “3” argument(s): “The account does not have permission to impersonate the requested user.”

    Any ideas ?

    Like

    • Problem solved – I had EWS set to Disabled on service Account – I have to run this command:
      Set-CASMailbox ServiceAccountName -EwsEnabled $true

      Like

      • Hi Lazy,
        glad you solved the issue. Nevertheless you need to assign an account the permission to impersonate. This is not the case by default. The other option is to have full mailbox access to the mailboxes you want to access.
        Ciao,
        Ingo

        Like

  4. Hello
    error:
    Обнаружено несколько неоднозначных перегрузок для “ExchangeService”, число аргументов: “1”.
    (It was found a few ambiguous overloads for “ExchangeService” number of arguments: “1”.)

    Ex 2013 cu12 win 2012r2 rus

    What can I do?
    Thank you

    Like

      • Hello 🙂
        its because i install EWS Managed API 1.2 (This script requires the EWS Managed API 1.2 or later.
        Please download and install the current version of the EWS Managed API from)

        after that I install api 2.0 but not restart posh and get this error.

        Today I restart posh and script works fine.

        grazie
        Ciao,
        Fuzailov

        Like

  5. Pingback: PowerShell and bit field attributes | The clueless guy

  6. Pingback: History of a calendar item | The clueless guy

  7. Hi. I’m trying to use your script to generate a report on calendar items that have been edited in the last day, on an Exchange 2013 CU14 server using EWS API v2.
    I can get it to successfully report edited items, but it does not always include a Start or End time for all events – some have them, some are null.
    Do you know why that might happen?

    Like

    • Hi Andy,
      could you try to run the script with the switch “-Verbose” and see if you see errors like “Could not calculate time from extended properties!”. Besides this I’m curious about your culture (get-culture).
      Ciao,
      Ingo

      Like

      • Thanks for responding so quickly!

        Get-Culture returns “LCID 2057, en-GB, English (United Kingdom)”, which is what I’d want it to be.

        For a query returning three results, two showing Start and End and one not, -Verbose output returns:

        VERBOSE: Both properties exist. Will caculate start time…
        VERBOSE: Could not calculate time from extended properties!
        VERBOSE: Both properties exist. Will caculate end time…
        VERBOSE: Could not calculate time from extended properties!
        VERBOSE: Bit mask:0
        VERBOSE: Both properties exist. Will caculate start time…
        VERBOSE: Both properties exist. Will caculate end time…
        VERBOSE: Bit mask:0
        VERBOSE: Both properties exist. Will caculate start time…
        VERBOSE: Both properties exist. Will caculate end time…
        VERBOSE: Bit mask:0

        Like

      • The script is trying to calculate the Start and End time based on 2 properties. One is the TimeZone and I think that on the failing one the TimeZone was set on the client with an unknown string. What is returned for the TimeZone? You need to run the script with “-AllItemProps”.
        Ciao,
        Ingo

        Like

      • The TimeZone property for the events that work is:
        “(UTC) Dublin, Edinburgh, Lisbon, London”

        The one that does not is:
        “(UTC+00:00) Dublin, Edinburgh, Lisbon, London”

        Looking for differences, the events that work were created on Outlook 2010, while the one that does not is Outlook 2013.

        Like

      • The Exchange server shows this:
        Id : GMT Standard Time
        DisplayName : (UTC) Dublin, Edinburgh, Lisbon, London
        StandardName : GMT Standard Time
        DaylightName : GMT Daylight Time
        BaseUtcOffset : 00:00:00
        SupportsDaylightSavingTime : True

        Like

      • Increasing the date range I’m searching doesn’t help clarify things, either.
        I’ve found events made by the same user on the same PC on the same day that differ in which Timezone string they use. I’ve tested available 2010/2013 clients and found no patterns, so I can’t even suggest it’s a quirk with a specific version of Outlook, either.

        The difference appears to comes as the event is created: editing an event with the correct timezone maintains the correct timezone. Editing an event with the incorrect timezone maintains the incorrect timezone.

        It doesn’t help solve the problem, but at least now I know I need to modify the ConvertUTCTimeToTimeZone function to alter the UTC+00:00 timezone and get it working for my needs.

        Is there anything else you might like me to check for you, in case someone else comes across the same issue?

        Like

      • Appreciate your help. I’m currently installing on a new box CU14. I’m not sure why the display names for the timezone are different. Did you install Exchange on an OS with localization en-GB?

        Like

      • found a machine in my landscape, which was outdated in terms of Windows Updates. After installing the latest updates the timetone now also shows (UTC+00:00). I couldn’t figure out, which update it was.
        Ciao,
        Ingo

        Like

  8. Pingback: How to hunt down an EAS bug | The clueless guy

  9. Hi Ingo, thanks for posting this script, but I have a request I’d like to get it to output only those Calendar Items (“IPF.Appointment”) where the Start date is ‘Today.’ Can you point me in the right direction?

    Like

    • Hi Greg, you want to filter based on the Start date? Why? You can filter on modify date, which makes sense, but I don’t see a scenario where you want to filter on Start date. Could you share more details about this?

      Like

      • Ingo,

        We’re a non-profit social services organization with about 24 Counselors and 12 Session Rooms. The rooms have Resource Calendars. The Subject of each event in the Rooms is the name of the client. We’d like to print a list of all the Subjects (Names) for all the Rooms so our Receptionist knows they are expected and can buzz them thru security. Right now she compiles a list by hand and pastes them into an Excel worksheet.

        Like

      • Hi Greg, I played around with this. So far I couldn’t find a way to filter like that. The problem is that the client is in charge of representing you the item in your calendar. Think about recurrent meetings. Sure there is the property Start and End, but in a serie this doesn’t match the actual day. I’m still trying to find a way…will update you.

        Like

      • Thanks for this. I could settle for filtering the objects where Start == “Today”. It is envisioned that we will run this every workday, so no worries about recurring meetings. Besides, the schedules themselves are very fluid and can change a lot, esp with Counselors calling out sick or clients cancelling appointments.

        Like

  10. Hi Ingo,
    I’m trying to troubleshoot an issue with some Exchange 2010 calendars. I’ve been able to use your script to get the basic details, but when I try to gather the enhanced details, I get the following error.

    The value I used for CleanGlobalObjectID was taken from the basic details

    [PS] C:\scripts>.\Get-CalendarItems.ps1 -EmailAddress $mbs -CleanGlobalObjectID 040000008200E00074C5B7101A82E0080000000050E62EE8276BD20100000000000000
    001000000026A212BDD88C8243888EAA1247070B46 -AllItemProps

    CategoryInfo : InvalidOperation: (Alias:Token) [], RuntimeException
    ErrorDetails :
    Exception : System.Management.Automation.RuntimeException: Cannot find an appropriate constructor to instantiate the custom attribute obj
    ect for type ‘Alias’.
    at System.Management.Automation.AttributeNode.GetCustomAttributeObject()
    at System.Management.Automation.AttributeNode.GetCustomAttribute()
    at System.Management.Automation.ScriptBlock.InitializeAttributesAndParameters()
    at System.Management.Automation.ScriptBlock.get_UsesCmdletBinding()
    at System.Management.Automation.CommandDiscovery.GetScriptAsCmdletProcessor(IScriptCommandInfo scriptCommandInfo, Executio
    nContext context, Boolean useNewScope, Boolean fromScriptFile)
    at System.Management.Automation.CommandDiscovery.CreateCommandProcessorForScript(FunctionInfo functionInfo, ExecutionConte
    xt context, Boolean useNewScope)
    at System.Management.Automation.CommandDiscovery.LookupCommandProcessor(CommandInfo commandInfo, CommandOrigin commandOrig
    in, Nullable`1 useLocalScope)
    at System.Management.Automation.CommandDiscovery.LookupCommandProcessor(String commandName, CommandOrigin commandOrigin, N
    ullable`1 useLocalScope)
    at System.Management.Automation.ExecutionContext.CreateCommand(String command)
    at System.Management.Automation.CommandNode.CreateCommandProcessor(Int32& index, ExecutionContext context)
    at System.Management.Automation.CommandNode.AddToPipeline(PipelineProcessor pipeline, ExecutionContext context)
    at System.Management.Automation.PipelineNode.Execute(Array input, Pipe outputPipe, ArrayList& resultList, ExecutionContext
    context)
    at System.Management.Automation.StatementListNode.ExecuteStatement(ParseTreeNode statement, Array input, Pipe outputPipe,
    ArrayList& resultList, ExecutionContext context)
    FullyQualifiedErrorId : CannotFindConstructorForCustomAttribute
    InvocationInfo :
    At C:\scripts\Get-CalendarItems.ps1:236 char:15
    + [Alias <<<< ()]
    PipelineIterationInfo :
    TargetObject : Alias

    Regards
    Ralph

    Like

  11. Hi Ingo,

    Nice site you have here with some good information. Thanks for taking the time to explaining it for the rest of us 🙂

    I’ve been trying to use Get-CalendarDiagnosticlog and Get-CalendarDiagonsticAnalysis to troubleshoot a problem.

    I connect to my exchange server with PSsession. Like so:

    $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri EXCHANGE SERVER NAME
    Import-PSSession $Session

    Then when I run these two:

    Get-CalendarDiagnosticLog -Identity USERNAME -Subject “SUBJECT” -LogLocation “TEMP” -Latest

    and

    Get-CalendarDiagnosticAnalysis -LogLocation “LOGLOCATION ON EX SERVER” -DetailLevel Advanced > TEMP.CSV

    on a specific meeting that I want to troubleshoot. I get only the headers with no content. If I do it an another meeting it gives me all the information.
    This is done on the same user.

    I’ve also tried running it on the exchange management shell and got the same result.

    Any idea why I am getting “empty” logs on this one meeting?

    Best Regards,
    Dino

    Like

    • Hi Dino, no idea. Have you tried my script? Just to see if there is a difference. Alternative I would check the items with MFCMAPI. You can open them and see if the properties are really not there or the item is corrupt.
      Ciao,
      Ingo

      Like

  12. Hi Ingo,
    I use your script and everything works great.
    I have one question.
    Can also read calendar entries 30 days in the future?
    Best Regards,
    Joe

    Like

    • Hi Joe,
      the script will return all objects, which matches the filter. Doesn’t matter how far in the future or in back in time. As long as it matches the items will be returned.
      Ciao,
      Ingo

      Like

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 )

Twitter picture

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

Facebook photo

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

Google+ photo

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

Connecting to %s