System.Management.Automation.Remoting.PSRemotingTransportException:访问被拒绝。

时间:2014-07-21 06:37:07

标签: c# powershell iis exchange-server exchange-server-2010

我正在使用Exchange Server 2013。 当我尝试在IIS中运行我的C#代码时,我得到了Exception。

System.Management.Automation.Remoting.PSRemotingTransportException: Connecting to remote server exchangeserver.admin.com failed with the following error message : Access is denied. For more information, see the about_Remote_Troubleshooting Help topic.

但是本地[在Visual Studio]我的代码工作正常,在发布我的代码并通过IIS运行后我得到了异常。

请参阅代码

 var runspace = RunspaceFactory.CreateRunspace();

            runspace.Open();

            object psSessionConnection;

            // Create a powershell session for remote exchange server
            using (var powershell = PowerShell.Create())
            {
                var command = new PSCommand();
                command.AddCommand("New-PSSession");
                command.AddParameter("ConfigurationName", "Microsoft.Exchange");
                command.AddParameter("ConnectionUri", new Uri("http://ExchangeServer.admin.com/powershell/Microsoft.Exchange"));
              //  command.AddParameter("Authentication", "Kerberos");
                powershell.Commands = command;
                powershell.Runspace = runspace;

                // TODO: Handle errors
                var result = powershell.Invoke();

                Collection<ErrorRecord> errors = powershell.Streams.Error.ReadAll();
                if (errors != null || errors.Count > 0)
                {
                    foreach (ErrorRecord er in errors)
                    {
                        //log.Error(er.Exception.ToString());
                        return er.Exception.ToString();
                    }
                }

                psSessionConnection = result[0];
            }

IIS无法访问远程Exchange服务器的Powershell会话,为什么?

请分享您的想法

4 个答案:

答案 0 :(得分:0)

默认情况下不允许使用PowerShell进行远程连接。服务器需要每个用户明确允许这个。请参阅:Enable-PSRemoting

(提示:似乎无法对两个域进行任何连接。)

首先应该尝试使用PowerShell进行远程连接,以确保它没有C#实现问题:

PS D:\temp> $cerd = Get-Credential
...
PS D:\temp> $Session = New-PSSession -ConfigurationName Microsoft.Exchange 
-ConnectionUri http://ExchangeServer.admin.com/PowerShell/ -Authentication Kerberos -Credential 
$cerd

PS D:\temp> Import-PSSession $Session
.....
PS D:\temp> Get-TransportAgent

答案 1 :(得分:0)

我有类似的问题。我在IIS上托管的Web应用程序运行得很好。有一天出现了这个问题。来自IIS服务器的远程PowerShell(只是PowerShell控制台,而不是Web应用程序)工作正常。

我发现(在使用Exchange角色的几天之后),重新启动应用程序池不足以加载应用程序池标识的新权限(我已经更改了AD&#34;&#34;的成员)。这在调试期间非常混乱。

当我在IIS服务器上将应用程序池标识设置为管理员时,一切都开始工作了。现在我要将这些权限降低到最低限度。

答案 2 :(得分:0)

这是一个非常古老的线程,但建议的答案对我不起作用。我终于想通了,想分享我的解决方案。此访问被拒绝消息是由运行该应用程序的用户引起的。因此,应用程序池标识导致了我的错误。

我将其从 ApplicationPoolIdentity 更改为 NetworkService 并且成功了!

答案 3 :(得分:0)

我的应用程序池由 AD 用户执行。 我遇到了同样的问题,可以按如下方式解决: 我已将加载用户配置文件属性设置为 True。

SCREENSHOT 我希望这个解决方案可以帮助某人