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

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

первый вариант 

второй вариант с проверкой у кого уже есть событие не добавляет и так же у новых отключает уведомление.

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

# Учетные данные администратора
$AdminEmail = "moskv@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://mx.adminbd.ru/EWS/Exchange.asmx")

# ===== СПИСОК ПОЛЬЗОВАТЕЛЕЙ =====
# Вариант 1: вручную заданные адреса (активен по умолчанию)
$Users = @("user@adminbd.ru")

# Вариант 2: все почтовые ящики организации (раскомментируйте, закомментировав вариант 1)
# $Users =Get-Mailbox -ResultSize Unlimited -Filter {RecipientTypeDetails -ne "RoomMailbox"} | Where-Object { $_.Database -ne "Service" } | Select-Object -ExpandProperty PrimarySmtpAddress

# ===== ПАРАМЕТРЫ СОБЫТИЯ =====
$Subject = "Занято весь день"
$startDate = (Get-Date).AddDays((3 - (Get-Date).DayOfWeek + 7) % 7) # ближайшая среда
$startTime = $startDate.Date.AddHours(0)    # 00:00 (для целодневного не критично)
$Body = "Среда - день тишины"
$Location = "Офис"

# ===== ОСНОВНОЙ ЦИКЛ =====
foreach ($User in $Users) {
    Write-Host "Обработка: $User" -ForegroundColor Cyan

    # Переключение на целевой ящик
    $Service.ImpersonatedUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $User)

    # --- Проверка наличия события "Занято весь день" на ближайшую среду ---
    $startRange = $startDate.Date
    $endRange   = $startDate.Date.AddDays(1)  # проверяем только первый день (среду)
    $calendarView = New-Object Microsoft.Exchange.WebServices.Data.CalendarView($startRange, $endRange, 100)
    $appointments = $Service.FindAppointments([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar, $calendarView)

    $alreadyExists = $false
    foreach ($appt in $appointments.Items) {
        if ($appt.Subject -eq $Subject) {
            $alreadyExists = $true
            break
        }
    }

    if ($alreadyExists) {
        Write-Host "  У пользователя $User уже есть событие '$Subject' на $($startDate.ToShortDateString()). Пропускаем." -ForegroundColor Yellow
        continue
    }

    # --- Создание нового события ---
    $Appointment = New-Object Microsoft.Exchange.WebServices.Data.Appointment($Service)
    $Appointment.Subject = $Subject
    $Appointment.IsAllDayEvent = $true
    $Appointment.Location = $Location
    $Appointment.Body = $Body
    $Appointment.IsReminderSet = $false   # отключаем напоминание

    # Настройка повторения: каждая среда в течение 12 месяцев
    $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)

    Write-Host "  Создано повторяющееся событие '$Subject' для $User" -ForegroundColor Green
}

Write-Host "Готово." -ForegroundColor White

 

Similar Posts:

Метки:

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

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