尝试远程访问localhost

时间:2015-05-27 20:10:41

标签: powershell windows-server-2012 access-denied powershell-remoting 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

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

到目前为止我尝试过:

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

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

    我输入的具体命令是:

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

    连接到本地主机是否应该能够做到这一点?或者只是不支持?

    此时我完全失败了。任何帮助,即使是指向正确的方向,都将不胜感激。

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

2 个答案:

答案 0 :(得分:1)

所以,我上周末偶然发现了解决方案。它似乎与使用的身份验证有关。我把“-Authentication”参数留空了,打算让New-PSSession命令排除哪种方法最好。

显然,这默认为“Negotiate”身份验证方法,它将针对远程计算机选择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

为什么这样做?我没有线索。我会把它留给那些比我更了解的人来解释它。

答案 1 :(得分:0)

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

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

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