src/GetEwsFolderItem.ps1
Function Get-EwsFolderItem { [CmdletBinding(DefaultParameterSetName='ResultSize')] [OutputType([Microsoft.Exchange.WebServices.Data.Item])] Param( [Parameter(Position=0,Mandatory)] [Parameter(ParameterSetName='ResultSize')] [Parameter(ParameterSetName='Last')] [Alias('FolderName')] [ValidateScript({$_ -as [Microsoft.Exchange.WebServices.Data.Folder]})] [PSObject]$Folder, [Parameter(ParameterSetName='ResultSize')] [Parameter(ParameterSetName='Last')] [System.DateTime]$StartDate, [Parameter(ParameterSetName='ResultSize')] [Parameter(ParameterSetName='Last')] [System.DateTime]$EndDate, [Parameter(ParameterSetName='ResultSize')] [Alias('First')] [ValidateRange(1,1000)] [int]$ResultSize = 10, [Parameter(ParameterSetName='Last')] [ValidateRange(1,1000)] [int]$Last, [Parameter(ParameterSetName='ResultSize')] [Parameter(ParameterSetName='Last')] [ValidateRange(0,999)] [int]$Skip = 0, [Parameter(ParameterSetName='ResultSize')] [Parameter(ParameterSetName='Last')] [switch]$NoDetails, [Parameter(ParameterSetName='ResultSize')] [Parameter(ParameterSetName='Last')] [Microsoft.Exchange.WebServices.Data.ExchangeService]$Service = $Script:Service ) If ($Last) { $Offset = [Microsoft.Exchange.WebServices.Data.OffsetBasePoint]::End } Else { $Offset = [Microsoft.Exchange.WebServices.Data.OffsetBasePoint]::Beginning } If($Folder.FolderClass -eq 'IPF.Appointment') { If($StartDate) { $CalendarStartDate = $StartDate If(-Not $EndDate) { $CalendarEndDate = $StartDate.AddMonths(6) } } Else { $CalendarStartDate = Get-Date } If($EndDate) { $CalendarEndDate = $EndDate } Else { $CalendarEndDate = (Get-Date).AddMonths(6) } $ItemView = New-Object Microsoft.Exchange.WebServices.Data.CalendarView($CalendarStartDate,$CalendarEndDate,$ResultSize) } Else { $ItemView = New-Object Microsoft.Exchange.WebServices.Data.ItemView($ResultSize,$Skip,$Offset) } If(($StartDate -or $EndDate) -and $Folder.FolderClass -ne 'IPF.Appointment') { $SearchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+SearchFilterCollection([Microsoft.Exchange.WebServices.Data.LogicalOperator]::And) If($StartDate) { $AfterFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsGreaterThan([Microsoft.Exchange.WebServices.Data.ItemSchema]::DateTimeReceived,$StartDate) $SearchFilter.Add($AfterFilter) } If($EndDate) { $BeforeFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsLessThan([Microsoft.Exchange.WebServices.Data.ItemSchema]::DateTimeReceived,$EndDate) $SearchFilter.Add($BeforeFilter) } $Items = $Service.FindItems($Folder.Id,$SearchFilter,$ItemView) } Else { Write-Verbose 'Calendar or no dates' $Items = $Service.FindItems($Folder.Id,$ItemView) } If($NoDetails) { Write-Verbose 'ITEM CLASS: NoDetails specified' $Items } Else { ForEach ($Item in $Items) { $ItemId = $Item.Id.UniqueId Write-Verbose "ITEM CLASS: $($Item.ItemClass)" [Microsoft.Exchange.WebServices.Data.Item]::Bind($Service,$ItemId) } } } |