Как получить элементы повторяющегося собрания Outlook в powershell

#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 {}

    }
}