Exchange 2010에서 특정 계정의받은 편지함에있는 모든 메시지를 내보내려고합니다.이 솔루션은 매우 유용하지만 다른 게시물 How to export mail message to EML or MSG file with PowerShell and EWS에 있지만 스크립트를 실행하는 중에 오류가 발생했습니다. 나는 EWS를 처음 사용하는데 약간의 상실감이있다.PowerShell 및 EWS 파트 2를 사용하여 EML 또는 MSG 파일로 메일 메시지를 내보내는 방법
add-pssnapin Microsoft.Exchange.Management.PowerShell.E2010
$strMailboxName = "[email protected]"
$strSaveLocation = "\\server\share"
$dllpath = "C:\Program Files\Microsoft\Exchange\Web Services\1.2\Microsoft.Exchange.WebServices.dll"
[void][Reflection.Assembly]::LoadFile($dllpath)
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService([Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP1)
$windowsIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$sidbind = "LDAP://<SID=" + $windowsIdentity.user.Value.ToString() + ">"
$aceuser = [ADSI]$sidbind
$service.AutodiscoverUrl($aceuser.mail.ToString())
$MailboxName = get-mailbox -Identity $strMailboxName
$folderidcnt = new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::Inbox,$MailboxName.PrimarySmtpAddress.ToString())
$rootfolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($service, $folderidcnt)
$offset = 0;
$view = new-object Microsoft.Exchange.WebServices.Data.ItemView(10000, $offset)
$response = $service.LoadPropertiesForItems($results, [Microsoft.Exchange.WebServices.Data.PropertySet]::FirstClassProperties)
foreach ($mail in $results){
if ($mail.ToString() -eq "Microsoft.Exchange.WebServices.Data.EmailMessage") {
$mailSubject = $mail.Subject
$mailProps = New-Object Microsoft.Exchange.WebServices.Data.PropertySet([Microsoft.Exchange.WebServices.Data.ItemSchema]::MimeContent)
$mail.Load($mailProps)
#TODO: clean up $mailSubject so it's filesystem friendly
$fStream = New-Object System.IO.FileStream("$strSaveLocatoin\$mailSubject.eml", [System.IO.FileMode]::Create)
$fStream.Write($mail.MimeContent.Content, 0, $mail.MimeContent.Content.Length)
$fStream.Close()
}
}
나는 다음과 같은 오류가 점점 오전 : 나는의 시작 부분에 2 $ STR 변수를 annonymized 한
Exception calling "LoadPropertiesForItems" with "2" argument(s): "Value cannot be null.
Parameter name: items"
At C:\PowershellScripts\Exchange-SaveEMailAsFile.ps1:23 char:44
+ $response = $service.LoadPropertiesForItems <<<< ($results, [Microsoft.Exchange.WebServices.Data.PropertySet]::FirstC
lassProperties)
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : DotNetMethodException
You cannot call a method on a null-valued expression.
At C:\PowershellScripts\Exchange-SaveEMailAsFile.ps1:27 char:19
+ if ($mail.ToString <<<<() -eq "Microsoft.Exchange.WebServices.Data.EmailMessage") {
+ CategoryInfo : InvalidOperation: (ToString:String) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
을 여기
내가 현재 사용하고있는 코드의 복사본입니다 스크립트를 제외하고 코드는 제가 게시 한 것입니다.원래 게시물에 댓글을 추가하고 싶지만 아직 충분한 평판을 얻지 못했습니다.
도움을 주시면 감사하겠습니다. 고맙습니다.
오류와 코드가 정확하게 일치하지 않습니다. 당신은 당신의 코드에서'$ 결과'를 볼 수있는'$ view'를 가지고 있습니다. – Matt
죄송합니다. 다른 실행 결과를 게시했습니다. 나는 그것이 어떤 차이를 만들 었는지 알기 위해 몇 가지 변수를 돌아 다니고있었습니다. 원래의 게시물을 올바른 오류 메시지와 함께 편집했습니다. 내 사과. – BomSquad
Ok .. 그래서'$ results'는 값을 가지지 않으므로 오류가 발생합니다. 아직도 변수가 섞여 있다고 생각합니다. – Matt