我经常在powershell控制台的交换服务器上使用 New-MailboxExportRequest 命令,如下所示:
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010;
New-MailboxExportRequest -Mailbox jadrego –filepath \\computer1\c$\test.pst -verbose
它正常工作。但是,如果我在PS远程会话中运行这些命令,如下所示: 我使用相同的用户(域管理员,Exchange管理员)
Invoke-Command -ComputerName vdiv03 -ScriptBlock {
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010;
New-MailboxExportRequest -Mailbox jadrego –filepath \\computer1\c$\test.pst
}
我收到此错误:
failed to comunicate with mailbox database
with -verbose
答案 0 :(得分:1)
Exchange 2010中不支持像这样加载管理单元。
恕我直言,你最好只利用Exchange内置的本地远程处理来管理任务。$ExchangeServer = <exchange serer name>
$SessionParams =
@{
ConfigurationName = 'Microsoft.Exchange'
ConnectionURI = "http://$ExchangeServer/powershell/"
Authentication = 'Kerberos'
# Credential = $Creds
}
$Session = New-PSSession @SessionParams
Invoke-command -ScriptBlock {New-MailboxExportRequest -Mailbox jadrego –filepath \\computer1\c$\test.pst} -Session $Session
Remove-PSSession $Session
将$ ExchangeServer设置为其中一个Exchange 2010服务器的名称。该帐户需要是您正在执行的功能的必要RBAC角色的成员,并且您可以取消注释Credential参数,并在需要时为会话提供备用凭据。
这也将消除在运行脚本的计算机上安装管理工具的需要,以及将其修补到与服务器上相同级别的相关麻烦。
如果您正在以交互方式工作,或者运行使用许多Exchange cmdlet的脚本,则可以将会话创建添加到您的配置文件,并执行Import-PSSession,并且您将拥有本地可用的Exchange cmdlet的代理功能。可以使用与加载管理单元相同的方法。
Import-PSSsession $Session
需要注意的一些问题:
当您使用这样的隐式远程处理时,用于建立会话的凭证帐户将决定您将拥有哪些功能。似乎是添加到本地会话的Exchange cmdlet实际上是代理功能(您可以使用Get-Command验证这一点)。当您最初建立会话时,这组代理功能由Exchange动态创建,并将根据建立连接的帐户所属的RBAC角色进行自定义。如果它没有执行给定函数的权限,您将无法获得这些cmdlet的代理函数,或者函数可能没有这些函数的参数。
如果使用EMS shell或加载了snapin,则返回的结果与返回的本机对象的结果不同。它们将是反序列化的对象,这意味着它们可能缺少方法,并且与本机对象相比将失去一些保真度。很少有这种情况会出现问题,或者无法解决。
另请注意,使用隐式远程处理时,更新是在Exchange系统帐户的权限下进行的,而不是您的凭据。使用管理单元时,您的帐户必须具有直接更新存储在AD中的Exchange属性的权限,并且这些更改将记录在该帐户所做的Windows审核日志(如果已启用)中。使用隐式远程处理时,它们将被记录为由Exchange服务帐户完成。 Exchange将在其管理员审核日志中记录发出请求的实际用户帐户的详细信息,您可以使用Search-AdminAuditLog查找更改的时间,以及即使未启用Windows审核日志记录的人员。如果您直接使用管理单元并且未启用AD审核日志记录,则会丢失该审核跟踪。