Exchange Server 2019. Folder Empty (EWS API)
이번에는 EWS API 를 이용해서 사서함의 특정 폴더를 비우는 방법에 대해서 다뤄 보겠습니다.
저는 Exchange Machine이 아닌 AD Join된 Windows 10 Client에서 테스트를 진행하였습니다.
아래 글을 참고하여 진행하였습니다.
Applicationimpersonation 역할을 통한 EWS 인증 - scho blog
[단계 1] EWS API 설치
현재 MS의 공식 다운로드 링크가 없는 것으로 확인됩니다. 제 아래는 제 구글 드라이브 링크이오니 참고하시기 바랍니다.
설치 진행
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);