Skip to content

Instantly share code, notes, and snippets.

@adilio
Last active January 16, 2018 02:34
Show Gist options
  • Save adilio/cace5e1669d10ddcbd36c5eb858fc138 to your computer and use it in GitHub Desktop.
Save adilio/cace5e1669d10ddcbd36c5eb858fc138 to your computer and use it in GitHub Desktop.
Get-Appointment-via-EWS
# Import the EWS Managed API
Import-Module 'C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll'
# Set Exchange version, credentials, and other variables
$ExchangeVersion = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2
$Service = [Microsoft.Exchange.WebServices.Data.ExchangeService]::new($ExchangeVersion)
$User = "MY-SERVICE-ACCOUNT"
$Password = Get-Content MySuperSecureStringPassword.txt | ConvertTo-SecureString
$Service.Credentials = [System.Net.NetworkCredential]::new($User, $Password)
$Service.Url = "https://autodiscover.MYDOMAIN.ca/EWS/Exchange.asmx"
$DaysAhead = 1
# Specify Calendar folder to access
$FolderID = New-Object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar, "MY.MAILBOX@MYDOMAIN.CA")
$Folder = [Microsoft.Exchange.WebServices.Data.calendarFolder]::Bind($Service, $FolderID)
# Create View for Appointment Details
$View = [Microsoft.Exchange.WebServices.Data.CalendarView]::new([datetime]::Now, [datetime]::Now.AddDays($DaysAhead))
$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]::Location)
$Folder.FindAppointments($View) | Select-Object Start , End , Subject , Location
# Create View2 for Appointment Body
$BodyPropertySet = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)
$View2 = [Microsoft.Exchange.WebServices.Data.CalendarView]::new([datetime]::Now, [datetime]::Now.AddDays($DaysAhead))
$FolderItems = $Service.FindItems($Folder.Id, $View2)
[Void]$Service.LoadPropertiesForItems($FolderItems, $BodyPropertySet)
# For each Maintenance Window, generate e-mail for ticket
foreach ($Item in $FolderItems.Items) {
$Subject = $Item.Subject
$Body = $Item.Body.Text
$SmtpServer = "MY.SMTPSERVER.ca"
$From = "no-reply@MYDOMAIN.ca"
$To = "MY.EMAIL@MYDOMAIN.ca"
$BodyFooter =
Send-MailMessage -SmtpServer $SmtpServer -From $From -To $To -Subject $Subject -Body $Body -BodyAsHtml
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment