Exchange

Exchange Server 2019. Folder Empty (EWS API)

Pepuri 2022. 7. 28. 14:32
반응형

이번에는 EWS API 이용해서 사서함의 특정 폴더를 비우는 방법에 대해서 다뤄 보겠습니다.

저는 Exchange Machine 아닌 AD Join Windows 10 Client에서 테스트를 진행하였습니다.

 

아래 글을 참고하여 진행하였습니다.

Applicationimpersonation 역할을 통한 EWS 인증 - scho blog

 

[단계 1] EWS API 설치

현재 MS 공식 다운로드 링크가 없는 것으로 확인됩니다. 아래는 구글 드라이브 링크이오니 참고하시기 바랍니다.

EWS API 2.2 Download

 

설치 진행

 

Accept - Next

 

Next

 

Next

 

Close

 

[단계 2] 권한 부여

EWS API 에서 해당 작업을 진행하려면 ApplicationImpersonation 권한이 필요합니다.

ECP -> Permissions -> admin roles -> Organization Management -> ApplicationImpersonation 추가 (해당 Role 별도로 생성해서 추가하여 진행할 수도 있습니다.)

 

 

[단계 3] Script 테스트

Powershell 관리자 권한으로 실행합니다.

 

#EWS API Module 불러오기
Import-Module "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"

 

#Exchange 관리자 계정 입력
$PSCredential = Get-Credential

 

#Service 개체 생성
$Service = [Microsoft.Exchange.WebServices.Data.ExchangeService]::new()

 

#Service 개체에 자격증명 입력
$Service.Credentials = New-Object System.Net.NetworkCredential($PSCredential.UserName.ToString(),$PSCredential.GetNetworkCredential().password.ToString())

 

#Service 개체에 EWS URL 입력
$Service.Url = "https://mail.contoso.kr/EWS/Exchange.asmx"

 

#대상 사서함 지정
$MailboxName ="onprem-1@contoso.kr"

 

#ImpersonatedUserId 입력
$ArgumentList = ([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SMTPAddress),$MailboxName
$ImpUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId -ArgumentList $ArgumentList
$service.ImpersonatedUserId = $ImpUserId

 

#FolderId 확인 (Inbox 기준)
$folderid= new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::inbox,$MailboxName)

 

#Folder 값 바인딩
$folder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folderid)

 

#폴더 비우기 (Folder Empty)
$folder.Empty([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete, $true)

명령어 진행

 

명령어 진행 -> 하위 폴더까지 삭제되는 것을 확인할 있습니다.

 

이번에는 동기화 오류 폴더 비우기를 진행해 보겠습니다.

#Empty SyncIssues 
$folderid= new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Syncissues,$MailboxName)
$folder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folderid)
$folder.Empty([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete, $true)

순간 하위 폴더가 전부 삭제되고 재생성 되는 것으로 확인됩니다.

 

기본 스크립트는 다음과 같으며, 해당 스크립트를 응용하여 전체 사서함을 대상으로 진행하는 스크립트를 제작할 있습니다.

# Import EWS API dll
Import-Module "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll"
  
# Proivde the mailbox user credentials
$PSCredential = Get-Credential
  
$Service = [Microsoft.Exchange.WebServices.Data.ExchangeService]::new()
# Use Basic Authentication
$Service.Credentials = New-Object System.Net.NetworkCredential($PSCredential.UserName.ToString(),$PSCredential.GetNetworkCredential().password.ToString())
 
# Check EWS connection
$Service.Url = "https:///EWS/Exchange.asmx"

# Proivde the mailbox
$MailboxName =""

$ArgumentList = ([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SMTPAddress),$MailboxName
$ImpUserId = New-Object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId -ArgumentList $ArgumentList
$service.ImpersonatedUserId = $ImpUserId

$folderid= new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::inbox,$MailboxName)
$folder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service,$folderid)
$folder.Empty([Microsoft.Exchange.WebServices.Data.DeleteMode]::HardDelete, $true);

 

반응형