通过PowerShell获取outlook的今日约会:不需要的结果

时间:2012-03-27 15:12:07

标签: powershell outlook

我使用以下代码提取今天的约会:

$olFolderCalendar = 9
$ol = New-Object -ComObject Outlook.Application
$ns = $ol.GetNamespace('MAPI')
$Start = (Get-Date).AddDays(-1).ToShortDateString() + " 00:00"
$End = (Get-Date).AddDays(+1).ToShortDateString() + " 00:00"

$Filter = "[MessageClass]='IPM.Appointment' AND [Start] > '$Start' AND [End] < '$End'"

$Appointments = $ns.GetDefaultFolder($olFolderCalendar).Items
$Appointments.Sort("[Start]")
$Appointments.IncludeRecurrences = $false

foreach ($Appointment in $Appointments.Restrict($Filter) ) {
    ...
}

今天所有的约会都被列出,但是今天还没有发生很多定期约会(生日,每周预约......)。知道如何避免这种情况吗?

编辑:似乎所有这些不受欢迎的约会最初来自我的手机同步到Outlook。我会在“干净”的网站上试试这个剧本。 PC。

编辑:我在没有同步元素的情况下在另一台PC上尝试过该脚本并且它是相同的:所有重复元素都显示它们是否是今天。     AND [IsRecurring] =&#39; $ False&#39; 也没有帮助。

5 个答案:

答案 0 :(得分:2)

尝试更改过滤器:

$Filter = "[MessageClass]='IPM.Appointment' AND [Start] > '$Start' AND [End] < '$End'  AND     [IsRecurring] = '$False'"

在这里为我工作。

答案 1 :(得分:1)

如果@marceljg建议不起作用,请考虑通过管道到Where-Object cmdlet

来过滤掉不需要的约会

答案 2 :(得分:1)

意识到这是一个极度延迟的答案,但它在你的过滤器中。使用><即可排除在午夜开始或结束的项目,其中包含全天项目和重复项目。

尝试以下方法:

$filter = "[MessageClass]='IPM.Appointment' AND [Start] >= '$Start' AND [End] <= '$End'"

同时将IncludeRecurrences放在之前Sort

$Appointments.IncludeRecurrences = $true
$Appointments.Sort("[Start]")

答案 3 :(得分:0)

初始查询必须包含系列的原始约会,因此如果系列在3个月前开始,则必须相应地设置约会集合($ folder.items)日期范围。

之后,您可以过滤所需的日期范围。

此代码有效:

Function Get-OutlookCalendar
{
 echo starting...
 Add-type -assembly "Microsoft.Office.Interop.Outlook" | out-null
 $olFolders = "Microsoft.Office.Interop.Outlook.OlDefaultFolders" -as [type]
 $outlook = new-object -comobject outlook.application
 $namespace = $outlook.GetNameSpace("MAPI")
 $folder = $namespace.getDefaultFolder($olFolders::olFolderCalendar)

 $a = Get-Date -Hour 0 -Minute 00 -Second 00
 $b = (Get-Date -Hour 0 -Minute 00 -Second 00).AddDays(7)
 echo From $a To $b

 $Appointments = $folder.Items
 $Appointments.IncludeRecurrences = $true
 $Appointments.Sort("[Start]")

 $Appointments | Where-object { $_.start -gt $a -AND $_.start -lt $b } | Select-Object -Property IsRecurring, RecurrenceState, Subject, Start, Location

} #end function Get-OutlookCalendar

要运行这个 - 对于傻瓜,就像我昨天一样:)

cmd
powershell
PS C:\Users\Jose\Documents\WindowsPowerShell> Import-Module -Name Outlook\expcal.psm1 -Force
PS C:\Users\Jose\Documents\WindowsPowerShell> Get-OutlookCalendar

答案 4 :(得分:0)

“问题是该日历已经使用了15年,因此运行需要很长时间”-我也是

除了“ restrict”方法外,还有一个“ find”方法,它似乎只会得到第一个结果,因此,您必须使用“ findnext”方法循环查找其余结果。我发现最初使用两个单独的“限制”过滤器将非定期约会从定期约会中分离出来,然后在我的214万个定期约会中使用“查找”筛选器比将它们通过管道传递到where-object快得多。

editText[MaxSize -1]