#powershell #outlook
#powershell #мировоззрение
Вопрос:
Я использую приведенный ниже скрипт для извлечения элементов календаря Outlook, и он работает для событий, которые происходят один раз. Это не удается для повторяющихся приглашений на собрания, поскольку дата начала в нем будет указана, когда было отправлено приглашение, а не время начала мероприятия. Кроме того, я не вижу никакой переменной, ссылающейся на дату окончания события, поэтому не могу динамически искать это событие. Есть какие-нибудь предложения о том, как этого добиться?
Function Get-OutlookCalendar {
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)
$folder.items |
Select-Object -Property start,RequiredAttendees, Subject, IsRecurring, Organizer,ConversationID,RecurrenceState,OptionalAttendees,Body
}
$start_date=(Get-date).AddDays(-2) |Get-Date -Format 'MM/dd/yyyy'
$end_date=Get-Date -Format 'MM/dd/yyyy'
Get-OutlookCalendar| where-object { $_.start -gt [datetime]$start_date -and $_.start -le [datetime]$end_date } | sort-object start
Комментарии:
1. Итак, я был прав? У меня не было возможности проверить еще раз.
2. Да, Дуг, код ищет первую дату начала вместо даты начала повторения. Любые рекомендации о том, как решить эту проблему?
3. Пока нет, но я дам вам знать.
Ответ №1:
Вы можете попробовать следующий переключатель:
switch ($item.IsRecurring)
{
$false {
if ($item.start -ge $dt -and $item.start -lt ($dt).AddDays(1))
{
$item | Select-Object -Property Subject, Start, Duration, Location, RequiredAttendees
}
}
$true {
try {
$rec=$item.GetRecurrencePattern()
$recitem=$rec.GetOccurrence($dt.ToString("yyyy-MM-dd") " " $item.Start.ToString("HH:mm"))
$recitem | Select-Object -Property Subject, Start, Duration, Location, RequiredAttendees, IsRecurring
}
catch {}
finally {}
}
}