PowerShell Remoting 与 Exchange 2010:值不能为空

PowerShell Remoting 与 Exchange 2010:值不能为空

我无法通过远程 PowerShell 会话运行 Exchange 2010 cmdlet。

我以管理员身份启动本地 PowerShell 会话并发出以下命令——

PS C:\Windows\system32> $mailcred = Get-Credential
PS C:\Windows\system32> $mailSession = New-PSSession -ComputerName MAILSRV -Credential $mailcred
PS C:\Windows\system32> Enter-PSSession $mailSession
[MAILSRV]: PS C:\Users\jdoe\Documents> Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
[MAILSRV]: PS C:\Users\jdoe\Documents> hostname
MAILSRV
[MAILSRV]: PS C:\Users\jdoe\Documents> Get-ExchangeServer
Value cannot be null.    
Parameter name: serverSettings
    + CategoryInfo          : 
    + FullyQualifiedErrorId : System.ArgumentNullException,Microsoft.Exchange.Management.SystemConfigurationTasks.GetExchangeServer

[MAILSRV]: PS C:\Users\jdoe\Documents> get-mailbox
Value cannot be null.    
Parameter name: serverSettings
    + CategoryInfo          : 
    + FullyQualifiedErrorId : System.ArgumentNullException,Microsoft.Exchange.Management.RecipientTasks.GetMailbox

如您所见,所有 Exchange cmdlet 均不起作用。可能是什么问题?

答案1

您正在尝试连接到 Exchange Server 上的默认远程端点并从那里添加 ps snapins。这是错误的。将前 3 行替换为以下内容:

$mailcred = Get-Credential
$mailSession = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://MAILSRV/PowerShell/ -Credential $mailcred
Import-PsSession $mailSession

您不必进入会话,而是将其导入本地会话。从这里开始,您可以在本地使用特定于 Exchange 的 CmdLets。此外,某些 Exchange .Net 类型随 Exchange 管理控制台一起安装,因此如果您想处理邮箱大小,则需要将其安装在本地计算机上(Exchange 使用它自己的类型作为大小对象)

答案2

您可以这样做,使用 import-pssesion 并指定 connectionURI 和 ConfigurationName。

PS U:\> $cred = Get-Credential
PS U:\> $session = New-PSSession -ConnectionUri http://Exchange01/powershell -ConfigurationName Microsoft.Exchange -Credential $cred
PS U:\> Import-PSSession $session
PS U:\> Get-Mailbox marius.davidsen

Name                      Alias                ServerName       ProhibitSendQuota                                                                                        
----                      -----                ----------       -----------------                                                                                        
Marius Davidsen           Marius.Davidsen      Exchange01       unlimited             

这要求您在防火墙中允许 TCP 端口 80。

使用该会话,您还可以按照需要输入它:

PS U:\> Enter-PSSession $session
[Exchange01]: PS> get-mailbox
[Exchange01]: PS> get-mailbox marius.davidsen

Name                      Alias                ServerName       ProhibitSendQuota                                                                                        
----                      -----                ----------       -----------------                                                                                        
Marius Davidsen           Marius.Davidsen      Exchange01       unlimited         

答案3

我曾经遇到过同样的问题。我认为解决方案是这样的:

$s=new-pssession -computername xxxxx
import-pssession -session $s

然后添加你的管理单元,并运行你的命令

来源:http://forums.veeam.com/viewtopic.php?f=2&t=7514

答案4

我建议使用远程端点,它是正常 Exchange 安装的一部分。您可以找到更多详细信息这里

我已经在 EX 2010 和 EX 2013 中成功使用了它。它受支持并且遵循 RBAC 规则,因此我建议使用它,而不是将 Exchange 管理单元添加到“正常”远程端点。

相关内容