我使用以下代码提取今天的约会:
$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; 也没有帮助。答案 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]