我正在使用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会话,为什么?
请分享您的想法
答案 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 我希望这个解决方案可以帮助某人