尝试远程访问localhost上的Exchange服务器时出现"访问被拒绝"错误

Jgr*_*aum 8 powershell access-denied powershell-remoting windows-server-2012 exchange-server-2013

我正在尝试建立PowerShell会话以对localhost上的Exchange服务器运行多个Exchange命令.我一直收到以下错误:

New-PSSession : [<HOSTNAME>] Connecting to remote server <HOSTNAME> failed with the following error message
: Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.
At line:1 char:12
+ $session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'h ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [New-PSSession], PSRemotin
   gTransportException
    + FullyQualifiedErrorId : AccessDenied,PSSessionOpenFailed
Run Code Online (Sandbox Code Playgroud)

我的代码是Microsoft Technet文章的副本粘贴.它适用于远程机器,但无论何时我瞄准我运行的机器,我都会收到上述错误.

到目前为止我尝试过的:

  1. 检查了about_remote_troubleshooting帮助主题.与Access Denied错误相关的任何内容均无效.
  2. 使用与收到"拒绝访问"错误相同的凭据的目标远程计算机.(没有问题连接)
  3. 已验证我的PowerShell会话是以管理员身份运行的.(它是)
  4. 已验证Exchange命令行管理程序是否能够成功启动.(它是)
  5. 尝试没有凭据,看看是否可行.(它没有)
  6. 检查net usenet session确保我没有具有相同凭据问题的奇怪的多个连接.(我没有看到任何迹象表明)
  7. 从导致问题的脚本和手动键入命令到PowerShell控制台中尝试了这一点.(两种方式都得到了相同的结果.为了保持一致性)
  8. 在多个系统上尝试过这个.(到处都是相同的结果

一些快速说明:

  • 这是在Windows Server 2012上运行的Exchange 2013.它是一个基本安装,只是一个测试环境,除了安装和启用远程处理之外,它具有非常少的数据和最少的配置.
  • 使用的凭据用于域管理员,域管理员还具有必要的Exchange权限,可以执行我需要执行的任何操作.也就是说,只要我的目标机器不是我正在运行的机器,我就没有任何问题,没有其他任何改变我连接的方式.此外,这是一个测试域,其中域管理员的访问权限未受到任何限制或调整,因此它应该完全和完全访问所有内容.

我输入的具体命令是:

$cred = Get-Credential
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'http://<HOSTNAME>/Powershell' -Credential $cred
Run Code Online (Sandbox Code Playgroud)

连接到localhost这样的东西,我应该能做什么?还是只是不支持?

在这一点上我完全失去了.任何帮助,即使指出我正确的方向,将不胜感激.

编辑:我应该补充一点,我尝试使用与上面相同的命令从另一台机器连接到本地主机,并且它没有问题.所以,我认为这不是本地配置问题.

Jgr*_*aum 3

所以,我上周晚些时候偶然发现了解决方案。这似乎与使用的身份验证有关。我将“-Authentication”参数留空,打算让 New-PSSession 命令找出最佳方法。

显然,这默认为“协商”身份验证方法,该方法将针对远程计算机选择 Kerberos,但否则将选择 NTLM(或者至少,这是我观察到/假设的行为)。请参阅Microsoft对身份验证方法的说明。

指定特定的身份验证方法(“Kerberos”和“Basic”都有效,“Negotiate”没有,我没有对此做太多修改)可以解决问题并允许我连接到本地交换实例。

所以,而不是这样:

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'http://<HOSTNAME>/Powershell' -Credential $cred
Run Code Online (Sandbox Code Playgroud)

做这个:

$session = New-PSSession -Authentication Kerberos -ConfigurationName Microsoft.Exchange -ConnectionUri 'http://<HOSTNAME>/Powershell'  -Credential $cred
Run Code Online (Sandbox Code Playgroud)

为什么这样有效?我没有任何线索。我将把它留给比我更了解的人来解释。