Задача всем пользователям сделать событие в календаре занят на целый день каждую среду в течении года. Сделал скрипт на 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 }
Similar Posts:
- Как исправить ошибку. 3адача сообщила об ошибке (0x80190194): Произошла неожиданная ошибка. Не обновляется адресная книга
- Как сделать автоматическую смену пароля у пользователя exchange и отправка нового пароля на email.
- Как отправлять через powershell пользователям письмо с просьбой о смене пароля т.к. срок пароля истекает.
- Как перевести сервер echange 2016 в состояния облуживания (Maintenance).
- Как исправить ошибку Database is mandatory on UserMailbox exchange.