"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 来自的机器时,我都会收到上述错误。
到目前为止我尝试过的:
- 检查了
about_remote_troubleshooting
帮助主题。与拒绝访问错误相关的任何内容均无效。
- 目标远程计算机使用与收到拒绝访问错误相同的凭据。 (连接没有问题)
- 已验证我的 PowerShell 会话正在 运行 以管理员身份进行。 (是)
- 已验证 Exchange 管理 Shell 能够成功启动。 (是)
- 在没有凭据的情况下尝试查看是否可行。 (它没有)
- 检查了
net use
和 net session
以确保我没有出现具有相同凭据问题的奇怪的多个连接。 (我没有看到任何迹象表明)
- 通过导致问题的脚本和手动将命令键入 Powershell 控制台进行了尝试。 (两种方式都得到了相同的结果。为了一致性,是的)
- 在多个系统上试过了。 (到处都是相同的结果)
一些快速笔记:
- 这是在 Windows Server 2012 上 运行ning 的 Exchange 2013。这是一个基本安装,只是一个测试环境,除了安装和启用远程处理之外,数据和配置很少。
- 使用的凭据是域管理员的,它也有必要的 Exchange 权限来做我需要做的任何事情。也就是说,只要我的目标机器不是我 运行ning 所在的那台机器,我就没有任何问题,我的连接方式没有任何其他改变。此外,这是一个测试域,其中域管理员的访问权限没有受到任何限制或调整,因此它应该拥有对所有内容的完全访问权限。
我输入的具体命令是:
$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
为什么这样做有效?我没有线索。留给比我懂的人解释吧。
我正在尝试针对本地主机上的 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 来自的机器时,我都会收到上述错误。
到目前为止我尝试过的:
- 检查了
about_remote_troubleshooting
帮助主题。与拒绝访问错误相关的任何内容均无效。 - 目标远程计算机使用与收到拒绝访问错误相同的凭据。 (连接没有问题)
- 已验证我的 PowerShell 会话正在 运行 以管理员身份进行。 (是)
- 已验证 Exchange 管理 Shell 能够成功启动。 (是)
- 在没有凭据的情况下尝试查看是否可行。 (它没有)
- 检查了
net use
和net session
以确保我没有出现具有相同凭据问题的奇怪的多个连接。 (我没有看到任何迹象表明) - 通过导致问题的脚本和手动将命令键入 Powershell 控制台进行了尝试。 (两种方式都得到了相同的结果。为了一致性,是的)
- 在多个系统上试过了。 (到处都是相同的结果)
一些快速笔记:
- 这是在 Windows Server 2012 上 运行ning 的 Exchange 2013。这是一个基本安装,只是一个测试环境,除了安装和启用远程处理之外,数据和配置很少。
- 使用的凭据是域管理员的,它也有必要的 Exchange 权限来做我需要做的任何事情。也就是说,只要我的目标机器不是我 运行ning 所在的那台机器,我就没有任何问题,我的连接方式没有任何其他改变。此外,这是一个测试域,其中域管理员的访问权限没有受到任何限制或调整,因此它应该拥有对所有内容的完全访问权限。
我输入的具体命令是:
$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
为什么这样做有效?我没有线索。留给比我懂的人解释吧。