Создание пользовательской папки в корневой папке (Входящие) во всех почтовых ящиках в MS Exchange 2010
В работе имеется почтовый сервер на базе 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")
, для создания папки в конкретном почтовом ящике. (в «» укажите свой почтовый ящик)
MassCreateFolder
, либо SingleCreateFolder("admin@jakondo.ru")
!Результат выполнения скрипта:
ПОНРАВИЛАСЬ ИЛИ ОКАЗАЛАСЬ ПОЛЕЗНОЙ СТАТЬЯ, ПОДДЕРЖИ АВТОРА ДОНАТОМ
Обсуждение
Нет комментариев.