【问题标题】:Copy Items Between Two EWS Servers - Powershell在两个 EWS 服务器之间复制项目 - Powershell
【发布时间】:2015-08-07 11:17:13
【问题描述】:

我正在尝试进入 EWS,我的目标是在两个不同位置的两个 Exchange 邮箱之间复制数据。

我正在绑定两个收件箱文件夹,每个文件夹都在不同的邮箱中 然后我获取源收件箱文件夹中的项目并尝试将这些项目复制到目标收件箱文件夹,这是代码。

Add-Type -Path "C:\Program Files (x86)\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll"  

## Remote Connection ##

$MailboxName="User@Domain.com"
$ExchangeVersion = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2007_SP1
$Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials("User","Password","Domain")
$exchService = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($ExchangeVersion)
$exchService.Credentials = $Credentials

$exchService.Url = "https://Domain.com/EWS/Exchange.asmx"

## Bind Remote Inbox Folder

$FolderName="Inbox" 
$folderid= new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::$FolderName,$MailboxName)  
$MailFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($exchservice,$folderid)

## Local Connection ##

$LocalMailboxName = "LocalUser@Domain.local"
$LocalExchangeVersion = [Microsoft.Exchange.WebServices.Data.ExchangeVersion]::Exchange2010_SP2
$LocalExchService = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService($LocalExchangeVersion)
$LocalExchService.UseDefaultCredentials = $true
$LocalExchService.AutodiscoverUrl($LocalMailboxName)
$LocalExchService.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, $LocalMailboxName) 
$LocalFolderName="Inbox" 
$Localfolderid= new-object Microsoft.Exchange.WebServices.Data.FolderId([Microsoft.Exchange.WebServices.Data.WellKnownFolderName]::$LocalFolderName,$LocalMailboxName)  
$LocalMailFolder = [Microsoft.Exchange.WebServices.Data.Folder]::Bind($LocalExchService,$Localfolderid)

## Get the items of the source mailbox "Inbox"

$ivItemView =  New-Object Microsoft.Exchange.WebServices.Data.ItemView(100)
$fiItems = $exchservice.FindItems($MailFolder.id,$ivItemView)

## The Copy Section

foreach ($item in $fiItems) 
{
$item.Copy($LocalMailFolder.Id)
}

然后我得到这个错误:

Exception calling "Copy" with "1" argument(s): "No mailbox with such guid."
At line:1 char:30
+ foreach ($item in $fiItems) {$item.Copy($LocalMailFolder.Id)}
+                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : ServiceResponseException

感谢任何帮助,谢谢

【问题讨论】:

    标签: powershell exchangewebservices


    【解决方案1】:

    您不能使用 copy 在 Exchange 服务之间复制邮件,该错误仅表示远程服务不知道本地文件夹 ID - 因为远程服务上不存在该文件夹(具有该 ID)。

    您需要加载项目,在本地文件夹中创建一个新项目,将旧项目的所有属性复制到新项目,然后保存新项目。

    由于我不了解 Powershell,因此这里有一个 C# 清单,可以帮助您入门,而不是:

    foreach ($item in $fiItems) 
    {
    $item.Copy($LocalMailFolder.Id)
    }
    

    ->

    foreach (var remoteItem in fiItems) 
    { 
       var localItem = new Item(LocalExchService); 
       localItem.Subject = remoteItem.Subject;
       localItem.Body = remoteItem.Body;
       // ... and so on. need to cast to the correct type, to access ALL properties, too.
       localItem.Save(LocalMailFolder);
    }
    

    【讨论】:

    • 谢谢,如果可能的话,你能提供更多关于这个的信息吗?如果可能的话,用 powershell 或 c#
    • 谢谢,我复制了所有属性并运行它,当我执行 $LocalItem.Save($LocalFolderID) 时出现此错误:使用“1”参数调用“保存”的异常: “EmailAddress 或 ItemId 必须包含在请求中。”在 line:1 char:1 + $NewItem.save($Localfolderid) + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified : (:) [], MethodInvocationException + FullyQualifiedErrorId : ServiceResponseException
    • 顺便说一句:我用它来创建项目对象:$LocalItem = New-object Microsoft.Exchange.WebServices.Data.EmailMessage($LocalExchService)
    • 您是否将属性(这里很可能是电子邮件地址)设置为空字符串? EWS 讨厌这样。
    猜你喜欢
    • 1970-01-01
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-12
    相关资源
    最近更新 更多