Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Retrieve Calendar Information Using EWS Managed API 2.2 and PowerShell
Summary
This TechNet Wiki article is to demo a PowerShell script which retrieves calendar information of a given mailbox. For this we used EWS Managed API 2.2 in PowerShell.
References
- Download EWS Managed API
- How to: Communicate with EWS using EWS Managed API
- Get started with EWS Managed API client applications
- EWS Managed API reference
Solution
To achieve this requirement, we need to follow the steps:
# Load the assembly
Import-Module 'C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll'
# Pass the credential
$Admin = "chendrayan@contoso.onmicrosoft.com"
$Password = "SuperSecretPassword" | ConvertTo-SecureString -AsPlainText -Force
# Instantiate the Exchange Service Class
$Service = [Microsoft.Exchange.WebServices.Data.ExchangeService]::new([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2013_SP1)
# Set the credentials properties
$Service.Credentials = [System.Net.NetworkCredential]::new($Admin,$Password)
# Define the URL property
$Service.Url = "https://outlook.office365.com/EWS/Exchange.asmx"
# Using the Bind method in CalendarFolder class with the overloads $Service and Folder ID or name
$Folder = [Microsoft.Exchange.WebServices.Data.CalendarFolder]::Bind($Service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar)
# Define the view using CalendarView class - In our case searching calendar information for next 3 days
$View = [Microsoft.Exchange.WebServices.Data.CalendarView]::new([datetime]::Now,[datetime]::Now.AddDays(3))
# Load only required properties using the property set
$View.PropertySet = [Microsoft.Exchange.WebServices.Data.PropertySet]::new([Microsoft.Exchange.WebServices.Data.AppointmentSchema]::Subject,
[Microsoft.Exchange.WebServices.Data.AppointmentSchema]::Start,[Microsoft.Exchange.WebServices.Data.AppointmentSchema]::End,
[Microsoft.Exchange.WebServices.Data.AppointmentSchema]::DateTimeSent)
# Using the Find appointments methods - Get the output
$Folder.FindAppointments($View) | Select-Object start , End , Subject
Output 
Full Code
function Get-xCalendarInformation
{
<#
.SYNOPSIS
A PowerShell function to list calendar information
.DESCRIPTION
Long description
.EXAMPLE
PS C:\> Get-xCalendarInformation -Identity "user@tenant.onmicrosoft.com" -days 3
List next 3 days calendar information
.NOTES
@ChendrayanV
http://chen.about-powershell.com
#>
[CmdletBinding()]
param (
[Parameter(Mandatory,ValueFromPipeline,ValueFromPipelineByPropertyName)]
$Identity,
[Parameter()]
$Days,
[Parameter()]
[System.Management.Automation.CredentialAttribute()]
[pscredential]
$Credential
)
begin
{
Import-Module 'C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll'
}
process
{
$Service = [Microsoft.Exchange.WebServices.Data.ExchangeService]::new()
if($PSBoundParameters.ContainsKey('Credential'))
{
$Service.Credentials = [System.Net.NetworkCredential]::new($Credential.UserName,$Credential.Password)
}
else
{
$Service.UseDefaultCredentials = $true
}
$Service.Url = "https://outlook.office365.com/EWS/Exchange.asmx"
$Folder = [Microsoft.Exchange.WebServices.Data.CalendarFolder]::Bind($Service,[Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar)
$View = [Microsoft.Exchange.WebServices.Data.CalendarView]::new([datetime]::Now,[datetime]::Now.AddDays($Days))
$View.PropertySet = [Microsoft.Exchange.WebServices.Data.PropertySet]::new([Microsoft.Exchange.WebServices.Data.AppointmentSchema]::Subject,
[Microsoft.Exchange.WebServices.Data.AppointmentSchema]::Start,[Microsoft.Exchange.WebServices.Data.AppointmentSchema]::End,
[Microsoft.Exchange.WebServices.Data.AppointmentSchema]::DateTimeSent)
$Folder.FindAppointments($View) | Select-Object start , End , Subject
}
end
{
}
}
Usage
help Get-xCalendarInformation -Examples