"Access Is Denied" 尝试远程访问本地主机上的 Exchange 服务器时出错

"Access Is Denied" error when attempting to remote to Exchange server on localhost

我正在尝试针对本地主机上的 Exchange 服务器建立 PowerShell 会话以 运行 多个 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

我的代码是从 Microsoft Technet Article 复制粘贴的。它适用于远程机器,但每当我瞄准我 运行ning 来自的机器时,我都会收到上述错误。

到目前为止我尝试过的:

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

一些快速笔记:

我输入的具体命令是:

$cred = Get-Credential
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'http://<HOSTNAME>/Powershell' -Credential $cred

我应该能够像这样连接到本地主机吗?或者只是不支持?

此时我完全不知所措。任何帮助,即使是为我指明正确的方向,也将不胜感激。

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

如果您只是想在与当前会话相同的计算机上创建会话,请忽略 URI。

$cred = Get-Credential
$session = New-PSSession -ConfigurationName Microsoft.Exchange -Credential $cred

这将在您可以连接到并根据需要使用的本地主机上创建一个新会话。

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

显然,这默认为 "Negotiate" 身份验证方法,它将 select Kerberos 针对远程计算机,但 select NTLM 否则(或者至少,那是我的 observed/assumed行为)。请参阅身份验证方法的 this Microsoft description

指定一个特定的身份验证方法("Kerberos" 和 "Basic" 都有效,"Negotiate" 没有,我没有修改太多)解决了这个问题并允许我连接到本地交换实例。

所以,而不是这样:

$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri 'http://<HOSTNAME>/Powershell' -Credential $cred

这样做:

$session = New-PSSession -Authentication Kerberos -ConfigurationName Microsoft.Exchange -ConnectionUri 'http://<HOSTNAME>/Powershell'  -Credential $cred

为什么这样做有效?我没有线索。留给比我懂的人解释吧。