使用EWS从单个出现中删除整个会议系列

时间:2014-09-15 18:57:14

标签: powershell exchange-server exchangewebservices

目前我正在尝试在Exchange 2007中的组织会议室日历上进行一些清理。就像现在一样,我将去年的所有日历项目导出到包含所有日历项目的列表。

我正在搜索列表,查找名称中包含短语Canceled:的日历项目。 一旦我找到符合此条件的会议,我就会对该项目进行HardDelete

这适用于删除今天和365天之前的已取消会议。

但是,有些用户在〜2010年决定从现在开始直到结束时预定定期会议。我们现在制定了一项政策,不允许提前超过366天预订,但这是一项新政策,因此旧的古老定期会议仍然存在。

那么当我在过去365天内的搜索结果出现一次时,如何删除整个系列?


可以完全绕过我的问题的副问题是:

  

我如何或甚至可以查询日历上的每个日历事件?

在这种情况下,如果我删除会议的每一次会议都可以,因为它会捕获我查询中的所有事件。

1 个答案:

答案 0 :(得分:0)

如果您正在使用日历分页(扩展定期约会),那么您将被限制为可以返回的最大约会数以及您可以返回的时间段。在当前方法中获取Master实例的最简单方法是使用BindToRecurringMaster方法http://msdn.microsoft.com/en-us/library/microsoft.exchange.webservices.data.appointment.bindtorecurringmaster(v=exchg.80).aspx,您需要做的就是将其中一个出现的ItemId提供给它。

否则你可以做的是使用一个带有限制的FindItem来查找没有结束日期并删除它们的定期约会,例如

# Bind to the Calendar Folder
$folderid= new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar,$MailboxName)   
$Calendar = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folderid)

$Recurring = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition([Microsoft.Exchange.WebServices.Data.DefaultExtendedPropertySet]::Appointment, 0x8223,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Boolean); 

$sfItemSearchFilter = new-object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo($Recurring,$true) 


#Define ItemView to retrive just 1000 Items    
$ivItemView =  New-Object Microsoft.Exchange.WebServices.Data.ItemView(1000)   
$rptCollection = @()
$fiItems = $null    
do{ 
    $psPropset= new-object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.BasePropertySet]::FirstClassProperties)  
    $fiItems = $service.FindItems($Calendar.Id,$sfItemSearchFilter,$ivItemView)   
    if($fiItems.Items.Count -gt 0){
        [Void]$service.LoadPropertiesForItems($fiItems,$psPropset)  
        foreach($Item in $fiItems.Items){ 
            if($Item.Recurrence.HasEnd -eq $false){
                ## Do something of place other tests to ensure you don't delete the wrong thing
            }
        }
    }
    $ivItemView.Offset += $fiItems.Items.Count    
}while($fiItems.MoreAvailable -eq $true)