В работе имеется почтовый сервер на базе MS Exchange 2010 SP3. Необходимо в пользовательских почтовых ящиках, в корневой папке (Входящие), создать пользовательскую папку.
Задачу будем решать при помощи Microsoft Exchange Web Services Managed API 2.0 и скрипта написанном на PowerShell.
Скачиваем с оф. сайта Microsoft Exchange Web Services Managed API 2.0 . Устанавливаем на сервер, на котором развернут почтовый сервер Exchange.
Теперь необходимо назначить роль «ApplicationImpersonation
«, для пользователя от имени которого будет выполнятся подключение к EWS. Выполним команду в EMS (Exchange Managment Shel
l):
New-managementroleassignment –Role "ApplicationImpersonation" –user administrator
Получившийся у меня скрипт:
$FolderName = "TEST" $info = "Yellow" function CreateFolder($MailboxName) { $service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress,$MailboxName) $oFolder = new-object Microsoft.Exchange.WebServices.Data.Folder($service) $oFolder.DisplayName = $FolderName $oFolder.Save([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox) $service.ImpersonatedUserId = $null $OutResult = "DONE" return $OutResult } function CheckExistFolder($MailboxName) { $service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress,$MailboxName); $RootFolderID = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox, $MailboxName) $RootFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, $RootFolderID) $FolderView = New-Object Microsoft.Exchange.WebServices.Data.FolderView(1000) $FolderView.Traversal = [Microsoft.Exchange.WebServices.Data.FolderTraversal]::Deep $SearchFilter = New-Object Microsoft.Exchange.WebServices.Data.SearchFilter+IsEqualTo( [Microsoft.Exchange.WebServices.Data.FolderSchema]::Displayname, $FolderName ) $Response = $RootFolder.FindFolders($SearchFilter, $FolderView) ForEach ($folder in $Response.Folders) { $Boolean = "true" } $service.ImpersonatedUserId = $null #if ( $Boolean -ne "true") { #Write-host $MailboxName " - NOT_EXIST" #} else { #Write-host $MailboxName " - EXIST" #} return $Boolean } function MassCreateFolder() { Get-Mailbox | Select PrimarySmtpAddress, RecipientTypeDetails | Where { $_.RecipientTypeDetails -eq "UserMailbox"} | foreach-object { $Email = $_.PrimarySmtpAddress.ToString() $Result = CheckExistFolder($Email) if ( $Result -ne "true") { Write-host $Email " - NEED TO CREATE FOLDER" $Result = CreateFolder($Email) Write-host $Email " - CREATE FOLDER IS " $Result -foregroundcolor $info } } } function SingleCreateFolder($UsersMailbox) { $Result = CreateFolder($UsersMailbox) Write-host $UsersMailbox " - CREATE FOLDER IS " $Result -foregroundcolor $info } Import-Module -Name "C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll" $service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010) $service.Credentials = new-object Microsoft.Exchange.WebServices.Data.WebCredentials("jakonda","Aa1234567","jakondo.ru") $service.Url= new-object Uri("https://cas.example.com/EWS/Exchange.asmx") #MassCreateFolder #SingleCreateFolder("admin@jakondo.ru")
Небольшие пояснения по скрипту:
- В переменную
$FolderName
задается название папки, которую необходимо создать в почтовых ящиках. - Функция
CreateFolder($MailboxName)
выполняет подключение к почтовому ящику в переменной$MailboxName
, и создает в нем папку указанную в переменной$FolderName
- Функция
CheckExistFolder($MailboxName)
выполняет проверку, на наличие папки в почтовом ящике$MailboxName
папки с именем заданным в $FolderName. Если папка с именем в переменной$FolderName
, существует в почтовом ящике пользователя, то об этом будет сообщено в результат выполнения функции. - Функция
MassCreateFolder()
, делает выборку из почтовых баз данных, всех пользовательских почтовых ящиков (исключаются почтовые ящике мест, служебные) и по каждому пользовательскому ящику выполняется сперва проверка наличия папки и затем создание ее. если таковой в почтовом ящике нет. - Функция
SingleCreateFolder($UsersMailbox)
, выполняется таргетный запрос на проверку наличия папки в указанном почтовом ящике и создает ее, если таковая отсутствует.
Использование:
- Раскоментируйте строку
MassCreateFolder,
для создания указанной папки во всех почтовых ящиках - Раскоментируйте строку
SingleCreateFolder("admin@jakondo.ru")
, для создания папки в конкретном почтовом ящике. (в «» укажите свой почтовый ящик)
Результат выполнения скрипта:
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Оставить ответ