目前我正在尝试在Exchange 2007中的组织会议室日历上进行一些清理。就像现在一样,我将去年的所有日历项目导出到包含所有日历项目的列表。
我正在搜索列表,查找名称中包含短语Canceled:
的日历项目。
一旦我找到符合此条件的会议,我就会对该项目进行HardDelete
。
这适用于删除今天和365天之前的已取消会议。
但是,有些用户在〜2010年决定从现在开始直到结束时预定定期会议。我们现在制定了一项政策,不允许提前超过366天预订,但这是一项新政策,因此旧的古老定期会议仍然存在。
那么当我在过去365天内的搜索结果出现一次时,如何删除整个系列?
可以完全绕过我的问题的副问题是:
我如何或甚至可以查询日历上的每个日历事件?
在这种情况下,如果我删除会议的每一次会议都可以,因为它会捕获我查询中的所有事件。
答案 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)