Я использую Exchange Server 2013. Я получаю ниже Exception при попытке запустить мой код С# в IIS.
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 я получаю Exception.
См. Код
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 не смог получить доступ к сеансу Powershell для удаленного сервера Exchange, почему?
Поделитесь своими идеями
У меня была схожая проблема. Мое веб-приложение, размещенное на IIS, отлично работало. Однажды эта проблема возникла. Удаленная PowerShell с сервера IIS (просто консоль PowerShell, а не веб-приложение) отлично работала.
Я узнал (после нескольких дней работы с роли Exchange), что перезапуск пула приложений недостаточно для загрузки новых прав на идентификатор пула приложений (я изменил AD "Member of"). Это было очень запутанно во время отладки.
Когда я установил идентификатор пула приложений в качестве администратора на сервере IIS, все снова заработало. Теперь я уменьшу эти разрешения до минимума.
удаленные соединения с использованием powershell не разрешены по умолчанию. Серверу необходимо разрешить это явно для каждого пользователя. См.: Enable-PSRemoting
(Подсказка: кажется, что невозможно подключиться к двум доменам).
Сначала вы должны попытаться сделать удаленное соединение с помощью powershell, чтобы убедиться в отсутствии проблемы с С#:
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