---
title: "Using Get-CalendarDiagnosticLog in Powershell: Guide+Examples"
slug: get-calendardiagnosticlog
published: 2025-09-04T16:27:23.000Z
updated: 2025-09-04T16:27:43.000Z
feature_image: /blog/images/get-calendardiagnosticlog/get-calendardiagnosticlog-syntax-microsoft-learn.1600.webp
feature_image_alt: Microsoft Learn documentation for the Get-CalendarDiagnosticLog cmdlet showing its PowerShell syntax
author: James Futhey
author_slug: james
meta_description: Troubleshoot calendar issues in Exchange with the Get-CalendarDiagnosticLog cmdlet. Analyze mailbox logs, meeting changes, and calendar items
status: published
---

Calendar issues are one of the most common user problems in Microsoft Exchange environments. Meeting requests going missing, conflicting meeting timelines, or unexpected Replies can quickly frustrate both end users and administrators. The **Get-CalendarDiagnosticLog** cmdlet in **Exchange PowerShell** is one of the primary tools available to troubleshoot such situations by providing detailed **calendar diagnostic logs** from a specified mailbox.

## What is the Get-CalendarDiagnosticLog Cmdlet?

The **Get-CalendarDiagnosticLog** cmdlet is designed to retrieve **calendar diagnostic logs (CDLs)** from a user's mailbox in **Exchange Server**. These logs allow administrators to analyze the chronology of meeting requests, track meeting organizers, and review key event properties such as **EventStart, EventEnd**, and **PidTagLastModificationTime**.

The cmdlet is particularly useful when administrators need to troubleshoot calendar items that are not behaving as expected, such as missing meeting invites, calendar updates that do not synchronize across devices, or conflicting responses in a meeting timeline. It is supported in multiple versions of Exchange, including **Exchange Server 2010, 2013, 2016, and 2019**, and can be run in the **Exchange Management Shell**.

### Syntax

Get-CalendarDiagnosticLog

\-Identity &lt;MailboxIdParameter&gt;

```powershell
[-Subject <String>]
[-StartDate <ExDateTime>]
[-EndDate <ExDateTime>]
[-DomainController <Fqdn>]
[-Latest]
```

[-ItemIds &lt;String[]&gt;]

[-LogLocation &lt;String&gt;]

### Parameters

-   **Identity** - Specifies the mailbox from which to retrieve calendar diagnostic logs.
-   **Subject** - Filters logs by a specific meeting subject line; can be combined with ExactMatch for exact filtering.
-   **StartDate** - Sets the beginning of the date/time range for retrieving logs.
-   **EndDate** - Sets the end of the date/time range for retrieving logs.
-   **DomainController** - (On-premises only) Specifies a domain controller to query for Active Directory information.
-   **Latest** - Returns only the most recent matching calendar item logs; no value required.
-   **ItemIds** - Targets specific calendar entries by their unique item IDs; accepts multiple IDs.
-   **LogLocation** - (Exchange 2010/2013 only) Specifies a folder path to export calendar diagnostic logs as .msg files.

## Practical Uses of Get-CalendarDiagnosticLog

The **Get-CalendarDiagnosticLog** cmdlet is not something administrators run casually. It is a targeted tool designed to provide deep insight into how calendar items were created, updated, or modified within a mailbox. Here are three common, real-world situations where this cmdlet proves essential:

### 1\. Troubleshooting Missing or Conflicting Meeting Requests

A user insists they never received an important meeting invite, while the organizer shows it as "sent" in their **Calendar items**. Using **Get-CalendarDiagnosticLog**, an administrator can pull the **Calendar Diagnostic logs** for the mailbox and trace the chronology of events. By analyzing fields like **PidLidGlobalObjectId, PidTagLastModifierName**, and the **Replies** timeline, support staff can determine if the request was delivered, deleted, or overwritten by another client, such as a smartphone or Outlook sync.

### 2\. Investigating Unexpected Calendar Modifications

Calendars often get altered without users realizing it - for example, a meeting time shifts or a recurring series is shortened. With **Get-CalendarDiagnosticLog**, administrators can view which client or delegate made the change, when it occurred (**PidTagLastModificationTime**), and which **user email address** or **Calendar test delegate** was involved. This is particularly useful in cases where multiple assistants or shared mailboxes have access to modify a manager's calendar.

### 3\. Compliance and Audit Reviews for Meeting Activity

In larger organizations with **Exchange Server 2016, Exchange Server 2019**, or **Microsoft 365**, compliance officers may need to review a user's **calendar logs chronology** for regulatory or internal audit purposes. Running **Get-CalendarDiagnosticLog** provides a complete view of the **meeting timeline**, including meeting organizers, attendees, event start and end times, and subject lines. This helps verify whether proper procedures were followed, ensures calendar activity aligns with company policy, and provides documented evidence in cases of disputes or penalties tied to missed meetings.

## Prerequisites for Using Get-CalendarDiagnosticLog

Before running the **Get-CalendarDiagnosticLog** cmdlet, there are several requirements you need to be aware of:

-   **Exchange Environment** - This cmdlet is available only in **on-premises Exchange Server** (2010, 2013, 2016, 2019). It is not available in **Exchange Online PowerShell.
-   Permissions** - You must be assigned the **Mailbox Import Export** management role or have equivalent rights in the **Exchange Management Shell** to run this cmdlet.
-   **Modules** - Requires the **ExchangePowerShell** module, which is built into the **Exchange Management Shell.
-   Access Rights** - The mailbox specified must exist and be accessible from the Exchange organization where the cmdlet is executed.
-   **Domain Controller Connectivity** - If you specify the **DomainController** parameter, the server running the cmdlet must be able to communicate with the named domain controller.

## How to Use Get-CalendarDiagnosticLog: 6 Useful Examples

The **Get-CalendarDiagnosticLog** cmdlet is most effective when used with specific filters that narrow down which calendar items you want to investigate. Rather than dumping an entire mailbox’s history, you can target logs by subject, date range, meeting ID, or other identifiers. Below are practical, task-oriented examples showing how to apply this cmdlet in real troubleshooting and auditing work.

### 1\. Retrieve calendar diagnostic logs for a specific meeting subject

Filtering by the **Subject** parameter helps you focus on calendar items whose subject matches the provided text. You can refine this search by combining it with **ExactMatch** to ensure only exact subject lines are returned.

```powershell
Get-CalendarDiagnosticLog -Identity "james@meetingroom365.com" -Subject "Weekly development meeting" -ExactMatch $true
```

This command returns logs from the specified mailbox with the exact subject match you provided.

### 2\. Pull logs for a defined date rangef

Use **StartDate** and **EndDate** to define the window for your investigation. Specify the dates (and times, if needed) in your system’s short date format.

```powershell
Get-CalendarDiagnosticLog -Identity "james@meetingroom365.com" -StartDate "6/1/2024 6:00 AM" -EndDate "6/30/2024 6:00 PM"
```

You’re now limiting results to a specific timeline.

### 3\. Return only the most recent calendar item logs

Add the **Latest** switch to return only the most recent matching calendar entry. No value is required for this switch.

`Get-CalendarDiagnosticLog -Identity "james@meetingroom365.com" -Subject "Team Status Meeting" -Latest`

This command simplifies output by delivering only the newest relevant item.

### 4\. Identify a meeting by MeetingID

When you know the unique identifier (CleanGlobalObjectId) of a calendar item, use **MeetingID** to target it directly. This parameter overrides other filters such as **Subject**.

`Get-CalendarDiagnosticLog -Identity "james@meetingroom365.com" -MeetingID 040000008200E00074C5B7101A82E00800000000B0225ABF0710C80100000000000000001000000005B27C05AA7C4646B0835D5EB4E41C55`

This ensures you retrieve logs for that exact calendar item.

### 5\. Filter logs by ItemIds

Use **ItemIds** to specify one or multiple item IDs when you want to focus on particular calendar entries.

```powershell
Get-CalendarDiagnosticLog -Identity "james@meetingroom365.com" -ItemIds "ID1","ID2"
```

This isolates diagnostic output for specific entries.

### 6\. Export logs to .msg files (Exchange 2010 and 2013 only)

Use **LogLocation** to export logs to a local or UNC path as .msg files in Exchange Server 2010 or 2013 environments. This parameter is not supported in Exchange 2016 and later.

`Get-CalendarDiagnosticLog -Identity "james@meetingroom365.com" -Subject "Budget Meeting" -ExactMatch $true -LogLocation "C:CalendarExport"`

Files are stored under a subfolder named after the mailbox.

## Conclusion

The **Get-CalendarDiagnosticLog** cmdlet is not a tool you run casually - it is designed for precision when you need to diagnose, troubleshoot, or audit calendar activity in an Exchange environment. Whether you are investigating missing meeting requests, auditing user activity, or exporting logs for compliance in Exchange 2010 and 2013, the ability to filter by subject, date range, or meeting ID makes it indispensable.

Understanding the parameters and applying them correctly saves time, reduces noise in your results, and helps you zero in on the exact events that matter.
