【问题标题】:Using EWS to delete entire meeting series from a single occurence使用 EWS 从一次事件中删除整个会议系列
【发布时间】:2014-11-09 09:18:19
【问题描述】:

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

我正在搜索列表,查找名称中包含短语Canceled: 的日历项目。 一旦我找到符合此标准的会议,我就会在该项目上使用HardDelete

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

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

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


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

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

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

【问题讨论】:

    标签: powershell exchange-server exchangewebservices


    【解决方案1】:

    如果您使用日历分页(扩展定期约会),那么您将受限于可以返回的最大约会数量以及可以返回的时间段。在当前方法中获取 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) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-31
      • 2016-03-19
      • 2018-08-31
      • 1970-01-01
      相关资源
      最近更新 更多