2012-03-27 76 views
0

我今天抽取約見下面的代碼:獲取從Outlook今天的約會使用PowerShell:不想要的結果

$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)) { 
    ... 
} 

所有今天的約會列,但也有很多定期約會都沒有發生今天(生日,每週約會......)。任何想法如何避免這一點?

編輯:似乎所有這些不需要的約會原本是從我的手機同步到前景。我會在一臺'乾淨'的個人電腦上試用這個腳本。

編輯:我試過在沒有同步元素的另一臺PC上的腳本,它是相同的:所有重複出現的元素顯示,無論他們是否今天。 和[IsRecurring] ='$ False' 也沒有幫助。

回答

2

試着改變你的過濾器:

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

爲我工作在這裏。

+0

那不是爲我工作,但它也有效果運行此 - 因爲傻瓜,像我這樣的,即定期約會發生在今天的地方不會顯示。但那些我也想擁有。 – Fabian 2012-03-28 06:32:51

1

如果@marceljg建議不爲你工作,然後考慮管道過濾掉不想要的約會到Where-Object cmdlet的

+0

感謝您的提示,但我無法過濾它們出於同樣的原因@marceljg建議不起作用。我想要顯示週期性事件(在特定日期,例如今天),但不是每天都顯示。 – Fabian 2012-03-29 13:54:12

0

意識到這是一個非常延遲的答案,但它在你的過濾器。通過使用><,您不包括在午夜開始或結束的項目,其中涵蓋了全天項目和重複項目。

嘗試以下操作:

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

也把IncludeRecurrencesSort

$Appointments.IncludeRecurrences = $true 
$Appointments.Sort("[Start]") 
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