【问题标题】:"Access Is Denied" error when attempting to remote to Exchange server on localhost尝试远程访问本地主机上的 Exchange 服务器时出现“拒绝访问”错误
【发布时间】:2015-08-10 02:46:51
【问题描述】:

我正在尝试建立一个 PowerShell 会话,以针对本地主机上的 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

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

到目前为止我已经尝试过:

  1. 查看了about_remote_troubleshooting 帮助主题。与拒绝访问错误相关的内容均无效。
  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

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

在这一点上,我完全不知所措。任何帮助,即使是为我指明正确的方向,都将不胜感激。

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

【问题讨论】:

  • 您已验证您的域管理员可以访问服务器?我问的原因是我相信他们需要特殊的远程交换权限,我认为你只能在交换内部这样做。
  • @Luke 是的。我使用我的域管理员凭据登录到服务器。此外,从另一台计算机上,我可以使用这些域凭据远程访问这台计算机。 Aka,计算机 A 已安装交换。我使用域凭据登录到计算机 A(上例中的本地主机),无法通过 powershell 远程从 A 进行交换。但是,从计算机 B(在同一域上)我可以使用相同的凭据远程进入计算机 A 上的 Exchange。此外,如果我尝试使用我的管理员凭据从计算机 A 远程到计算机 C(也安装了交换),它可以工作
  • 好的,它只是从 A 到 A 不起作用...防火墙是否开启?虽然你解释这个的方式可能不是问题......
  • @Jgraum 在计算机 A 上运行 Set-Item -force WSMan:\localhost\Client\TrustedHosts –Value *
  • 简单猜一猜,你的登录账号设置密码了吗?

标签: powershell windows-server-2012 access-denied powershell-remoting exchange-server-2013


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    这将在 localhost 上创建一个新会话,您可以根据需要连接并使用该会话。

    【讨论】:

    • 试过这个,让我更接近。会话已创建,但由于某种原因它没有我需要运行的命令。我不完全确定为什么,因为我认为配置名称是使这些命令可用的原因。我想我可能只需要检测到我以某种方式定位我的本地主机,然后加载管理单元(microsoft.blah.blah.blah.Powershell.E2010)并以这种方式访问​​命令。
    • 我想你可能想多了,错过了你链接的那篇文章的重点。整件事就是访问 Exchange cmdlet如果您没有在本地计算机上安装 Exchange PowerShell 工具,您可以这样做。对于本地使用,您应该有一个到 Exchange 管理控制台的快捷方式或类似的东西,这将使用已加载且可用的 Exchange cmdlet 创建一个 powershell 会话。
    • 我可能没有正确解释我的预期用途。我正在编写一个脚本来针对给定的交换服务器自动运行一组命令。它将从外部应用程序运行,我不希望出现控制台。所以...据我所知,我需要针对本地计算机创建一个 pssession。不过,我上周晚些时候找到了一个解决方案,我很快就会在这里发布它作为答案。
    猜你喜欢
    • 1970-01-01
    • 2012-06-07
    • 2011-10-06
    • 2018-01-29
    • 1970-01-01
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多