Создание пользовательской папки в корневой папке (Входящие) во всех почтовых ящиках в MS Exchange 2010 SP3

В работе имеется почтовый сервер на базе 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 Shell):

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»)!

 

Результат выполнения скрипта:

 

Скачать “create_folder_(powershell_scrypt)_(exchange)” folder.ps1 – Загружено 30 раз – 3 KB

 

Понравилась или оказалась полезной статья, поблагодари автора

 

БесполезноСлабоватоПриемлемоОтличноПревосходно (Еще нет оценок)
Загрузка...

Оставить ответ

семь − четыре =