EWS Managed API Demo: Searchfilter
Hallo zusammen,
Nachdem ich mich ein bisschen in die Managed API von EWS eingearbeitet habe, wollte ich nach bestimmten Elementen suchen. Das geht am besten über einen SearchFilter.
Das Kernstück ist hier in untenstehendem Code dargestellt.
#Suche nach Elementen welche eine bestimmte MessageClass aufweisen
$MySearchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ItemClass, "IPM.Schedule.Meeting.Resp.Pos")
#Suche nach Elementen welche den gesuchten String im Subject enthalten
$MySearchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+ContainsSubstring([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::Subject, "TechTalk")
$View = New-Object Microsoft.Exchange.WebServices.Data.ItemView(100)
$ExResult = $EWService.FindItems([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MySearchFilter,$View)
Also mal schnell so ein Script basteln - kann auch heruntergeladen werden.
###############################################################################
# EWS Searchfilter in Inbox
# EWS Managed API DEMO
# Version 1.0 / 15.07.2012
# Andres Bohren / www.icewolf.ch / blog.icewolf.ch / info@icewolf.ch
###############################################################################
###############################################################################
# Function WriteLog
###############################################################################
Function WriteLog {
PARAM (
[string]$pLogtext
)
$pDate = $(get-date -format "dd.MM.yyyy HH:mm:ss")
$sw = new-object system.IO.StreamWriter($LogPath, 1)
$sw.writeline($pDate + " " + $pLogtext)
$sw.close()
}
###############################################################################
# Function SearchInbox
# Searches in Inbox by applying a SearchFilter
###############################################################################
Function SearchInbox
{
Try {
#Suche nach Elementen welche eine bestimmte MessageClass aufweisen
$MySearchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::ItemClass, "IPM.Schedule.Meeting.Resp.Pos")
#Suche nach Elementen welche den gesuchten String im Subject enthalten
$MySearchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+ContainsSubstring([Microsoft.Exchange.WebServices.Data.EmailMessageSchema]::Subject, "TechTalk")
$View = New-Object Microsoft.Exchange.WebServices.Data.ItemView(100)
$ExResult = $EWService.FindItems([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MySearchFilter,$View)
If ($ExResult -ne $Null)
{
Foreach ($Item In $ExResult.Items )
{
Write-Host ("ITEM Found: subject=" + $Item.Subject + " ItemClass=" +$Item.ItemClass + " LastModifiedTime=" + $Item.LastModifiedTime)
WriteLog ("ITEM Found: subject=" + $Item.Subject + " ItemClass=" +$Item.ItemClass + " LastModifiedTime=" + $Item.LastModifiedTime)
}
}
} catch [system.exception] {
WriteLog ("Error: " + $_.Exception.ToString())
Write-Host ("Error: " + $_.Exception.ToString())
}
}
###############################################################################
# MainProgramm
###############################################################################
# Global Vars
[string]$EwsApiDll = "C:\Program Files\Microsoft\Exchange\Web Services\1.2\Microsoft.Exchange.WebServices.dll"
[string]$LogPath = "T:\Visual Basic\PowerShell\EWSScript\EWSSearchFilter.log"
[string]$Email = "ewservice@icewolf.ch"
[string]$Username = "ewservice"
[string]$Password = "MySecretPassword!"
[string]$Domain = "Corp"
[string]$EWSURL = ""
#[string]$EWSURL = "https://icesrv01/EWS/Exchange.asmx"
#[string]$EWSURL = "https://icesrv01.corp.icewolf.ch/EWS/Exchange.asmx"
[string]$ImpersonationMailbox = "a.bohren@icewolf.ch"
# Main Programm
Try {
WriteLog "###############################################################################"
WriteLog "### Starting Script"
WriteLog "###############################################################################"
# Import EWS Managed API DLL
Import-Module -Name $EwsApiDll
Write-Host ("Imported EWS Module")
WriteLog ("Imported EWS Module")
# Connect to EWS
#$EWService = ConnectEWS ($Email, $Username, $Password, $Domain, $EWSURL)
# Create a new Exchange Service Object
$EWService = new-object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2)
$EWService.Credentials = new-object Microsoft.Exchange.WebServices.Data.WebCredentials($Username,$Password,$Domain)
Write-Host ("Connecting to EWS...")
WriteLog ("Connecting to EWS...")
If ($EWSURL -eq "")
{
$EWService.AutodiscoverUrl($Email)
Write-Host ("Using Autodiscover")
} else {
$EWService.Url = $EWSURL
Write-Host ("Using EWS URL")
}
$Mailbox = $ImpersonationMailbox
Write-Host ("-->Impersonation to Mailbox: " + $Mailbox)
Writelog ("-->Impersonation to Mailbox: " + $Mailbox)
$EWService.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $Mailbox)
# Search in Inbox
SearchInbox
# Clean Up
WriteLog "###############################################################################"
WriteLog "### Finished"
WriteLog "###############################################################################"
Write-Host "Finished"
} catch [system.exception] {
WriteLog ("Error in EmptyRecycleBin " + $_.Exception.ToString())
Write-Host ("Error in EmptyRecycleBin " + $_.Exception.ToString())
}