задача у всех удалить встречу созданную ранее
Add-Type -Path "C:\Program Files\Microsoft\Exchange Server\V15\Bin\Microsoft.Exchange.WebServices.dll"
# ===== УЧЕТНЫЕ ДАННЫЕ =====
$AdminEmail = "mosk@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")
# ===== СПИСОК ПОЛЬЗОВАТЕЛЕЙ =====
#$Users = @("user")
# Для всех ящиков раскомментируйте:
$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) # ближайшая среда
$searchStart = $startDate.Date.AddMonths(-1)
$searchEnd = $startDate.Date.AddMonths(13)
# ===== ОСНОВНОЙ ЦИКЛ УДАЛЕНИЯ СЕРИЙ =====
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)
# Поиск вхождений в календаре (CalendarView возвращает вхождения)
$calendarView = New-Object Microsoft.Exchange.WebServices.Data.CalendarView($searchStart, $searchEnd, 100)
$appointments = $Service.FindAppointments([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Calendar, $calendarView)
# Хэш для уникальных ID мастер-серий
$seriesIds = @{}
foreach ($appt in $appointments.Items) {
if ($appt.Subject -eq $Subject) {
try {
# Получаем мастер-серию (родительское повторяющееся событие)
$master = [Microsoft.Exchange.WebServices.Data.Appointment]::BindToRecurringMaster($Service, $appt.Id)
if ($master -ne $null) {
$seriesId = $master.Id.UniqueId
if (-not $seriesIds.ContainsKey($seriesId)) {
$seriesIds[$seriesId] = $true
}
}
else {
# Если встретилось обычное (не повторяющееся) событие — удаляем его как есть
Write-Host " Удаляем обычную встречу: $($appt.Subject) от $($appt.Start.ToShortDateString())" -ForegroundColor Magenta
$appt.Delete([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete)
}
}
catch {
Write-Host " Ошибка при получении мастер-серии: $($_.Exception.Message)" -ForegroundColor Red
}
}
}
# Удаляем каждую найденную серию (один раз)
foreach ($seriesId in $seriesIds.Keys) {
try {
Write-Host " Удаляем всю серию события '$Subject'..." -ForegroundColor Magenta
# Привязываемся к мастер-серии и удаляем её (все вхождения разом)
$masterAppt = [Microsoft.Exchange.WebServices.Data.Appointment]::Bind($Service, $seriesId)
$masterAppt.Delete([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete)
Write-Host " Серия успешно удалена." -ForegroundColor Green
}
catch {
Write-Host " Ошибка удаления серии: $($_.Exception.Message)" -ForegroundColor Red
}
}
if ($seriesIds.Count -eq 0) {
Write-Host " Событий с темой '$Subject' не найдено." -ForegroundColor Yellow
}
else {
Write-Host " Всего удалено серий: $($seriesIds.Count)" -ForegroundColor Green
}
}
Write-Host "Готово." -ForegroundColor White
Similar Posts:
- Как добавить всем пользователем событие на целый день в календаре exchange 2016 через EWS ver2.
- Как добавить всем пользователем событие на целый день в календаре exchange 2016 через EWS.
- Как сделать автоматическую смену пароля у пользователя exchange и отправка нового пароля на email.
- Как удалить у пользователя все группы кроме domain user
- Как исправить ошибку Database is mandatory on UserMailbox exchange.