Перейти к содержимому

Как добавить всем пользователем событие на целый день в календаре exchange 2016 через EWS.

Задача всем пользователям сделать событие в календаре занят на целый день каждую среду в течении года. Сделал скрипт на PowerShell через ews. exchange 2016.

По умолчанию в exchange 2016  есть ews его ставить нет необходимости если скрипт запустить с самого сервера exchange. Путь “C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.WebServices.dll

Если запускать с другого места надо установить ews

Install-Package Exchange.WebServices.Managed.Api

Путь C:\Program Files\PackageManagement\NuGet\Packages\Exchange.WebServices.Managed.Api.2.2.1.2\lib\net35

Добавить прав на exchange от кого будете запускать скрипт

Get-ManagementRoleAssignment -Role ApplicationImpersonation
New-ManagementRoleAssignment –Name:ImpersonationAssignment –Role:ApplicationImpersonation –User:moskvichev@adminbd.ru

Сам скрипт

Add-Type -Path "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.WebServices.dll"

# Учетные данные администратора
$AdminEmail = "moskvichev@adminbd.ru"
$Password = "pass"
$Creds = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials($AdminEmail, $Password)

# Подключение к службе EWS
$TimeZoneInfo = [System.TimeZoneInfo]::Utc
$Service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2016, $TimeZoneInfo)
$Service.Credentials = $Creds
$Service.Url = new-object Uri("https://mxs.adminbd.ru/EWS/Exchange.asmx")

# Список пользователей
#$Users = @("moskvichev@adminbd.ru")

$Users = Get-Mailbox -ResultSize Unlimited | Select-Object -ExpandProperty PrimarySmtpAddress
# $Users | measure | % { $_.Count }

# Параметры события
$Subject = "Занято весь день"
$startDate = (Get-Date).AddDays((3 - (Get-Date).DayOfWeek + 7) % 7) # Находим ближайшую среду
$startTime = $startDate.Date.AddHours(0) # 9:00 утра
$endTime = $startDate.Date.AddHours(6) # 18:00 вечера
$Body = "день тишины"
$Location = "Офис"



# Создание события для каждого пользователя
foreach ($User in $Users) {
    # Установить impersonation для текущего пользователя
    $Service.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $User)

    # Создание нового события
    $Appointment = New-Object Microsoft.Exchange.WebServices.Data.Appointment($Service)
    $Appointment.Subject = $Subject
    #$Appointment.Start = $startTime
    #$Appointment.End = $endTime
    $Appointment.IsAllDayEvent = $true # Убираем флаг "весь день", так как время конкретно указано
    $Appointment.Location = $Location
    $Appointment.Body = $Body
        # Настройка повторений
          
    # Применение повторений к событию
    $Appointment.Recurrence = New-Object Microsoft.Exchange.WebServices.Data.Recurrence+WeeklyPattern(($startTime),1,[Microsoft.Exchange.WebServices.Data.DayOfTheWeek]::Wednesday)
     $Appointment.Recurrence.EndDate= $startTime.AddMonths(12)
    # Сохранение события без отправки приглашений
    $Appointment.Save([Microsoft.Exchange.WebServices.Data.SendInvitationsMode]::SendToNone)
}

При проблемах

# Учетные данные администратора
$AdminEmail = "moskvichev@adminbd.ru"
$Password = "pass"
$Creds = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials($AdminEmail, $Password)

$Service.TraceEnabled = $true
$Service.TraceFlags = [Microsoft.Exchange.WebServices.Data.TraceFlags]::All

$folder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($Service, [Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar)

Проверить типы
# Проверка доступности типов
[System.Reflection.Assembly]::LoadFrom("C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.WebServices.dll")

# Получить типы из библиотеки
[AppDomain]::CurrentDomain.GetAssemblies() | ForEach-Object {
    $_.GetTypes() | Where-Object { $_.FullName -like "*Recurrence*" } | Select-Object FullName
}

Как добавить всем пользователем событие на целый день в календаре exchange 2016 через EWS.

Как добавить всем пользователем событие на целый день в календаре exchange 2016 через EWS.

Similar Posts:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Яндекс.Метрика