ошибка соединения при вызове командной консоли Exchange из c # - PullRequest
0 голосов
/ 27 июля 2011

Я получаю странное исключение после решения проблемы с сертификатом SSL. Пожалуйста помоги! Мой код: PSCredential credential = новый PSCredential («домен \ администратор», securePwd);

    WSManConnectionInfo connectionInfo = new WSManConnectionInfo(new Uri("https://www.xxx.com/powershell"), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential);
    Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo);
    connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
    using (runspace)
    {
        Collection<PSObject> psObject = GetUserInformation(10, runspace);

    }

публичный сборник GetUserInformation (int count, Runspace runspace) { использование (PowerShell powershell = PowerShell.Create ()) {

        powershell.AddCommand("Get-Users");
        powershell.AddParameter("ResultSize", count);

        runspace.Open();//**error happens**

        powershell.Runspace = runspace;

        return powershell.Invoke();
    }
}

Сообщение об ошибке: "Не удалось подключиться к удаленному серверу со следующим сообщением об ошибке: клиент WinRM не может обработать запрос. Клиент WinRM попытался использовать механизм проверки подлинности согласованием, но конечный компьютер (www.xxx.com:443) возвратил« доступ » ошибка «отказано». Измените конфигурацию, чтобы разрешить использование механизма проверки подлинности согласованием, или укажите один из механизмов проверки подлинности, поддерживаемых сервером. Чтобы использовать Kerberos, укажите имя локального компьютера в качестве удаленного пункта назначения. Также убедитесь, что клиентский компьютер и пункт назначения компьютер присоединен к домену. Чтобы использовать Basic, укажите имя локального компьютера в качестве удаленного пункта назначения, укажите обычную аутентификацию и укажите имя пользователя и пароль. "

Я использую базовую аутентификацию и предоставляю имя пользователя и учетные данные, почему он говорит «пытался использовать механизм проверки подлинности согласованием»?

Ответы [ 3 ]

3 голосов
/ 27 июля 2011

Сначала попробуйте установить свойство connectionInfo.AuthenticationMechanism ПЕРЕД созданием пространства выполнения.Так что поменяйте местами порядок строк 2 и 3 в вашем первом фрагменте кода.

Если это не помогает, убедитесь, что на веб-сайте PowerShell включена базовая аутентификация.

Для этого вам нужно перейти в диспетчер IIS, «Сайты», «Веб-сайт по умолчанию», PowerShell, выбрать функцию аутентификации и включить базовую аутентификацию.

Если базовая аутентификация не включена вСтраница функции проверки подлинности, ее необходимо установить, перейдя в диспетчер серверов, выберите роль веб-сервера, скажем «Добавить службы ролей», в узле «Безопасность» в древовидном представлении выберите «Основная проверка подлинности».

1 голос
/ 27 июля 2011

Использование базовой аутентификации в этом сценарии запрещено, если только явно не настроено на сервере ... вы можете включить его на стороне сервера или использовать Kerberos / NTLM ...

Подробнее см. http://technet.microsoft.com/en-us/library/dd351136.aspx и http://technet.microsoft.com/en-us/library/dd347642.aspx

0 голосов
/ 25 июня 2013

Я могу суммировать шаги, чтобы заставить обычную аутентификацию работать даже с компьютеров вне домена:

  • Set-ExecutionPolicy на Неограниченный как на клиенте, так и на сервере
  • правильно настроить TrustedHosts на клиенте и сервере
  • включить обычную аутентификацию на клиенте и сервере
  • убедитесь, что в разделе «Безопасность для веб-сервера (IIS)» установлена ​​роль базовой аутентификации
  • включить базовую аутентификацию для виртуального каталога PowerShell
  • использовать HTTP, а не https для доступа к серверу.

Вот также рабочий код:

PowerShell powershell = PowerShell.Create();
String pass = "password";
SecureString passSecure = new SecureString();
foreach (char c in pass.ToCharArray())
{
    passSecure.AppendChar(c);
}
PSCredential cred = new PSCredential("user", passSecure);

string schemaURI = "http://schemas.microsoft.com/powershell/Microsoft.Exchange";
Uri connectTo = new Uri("http://192.168.69.116/powershell/");            
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(connectTo, schemaURI, cred);
connectionInfo.MaximumConnectionRedirectionCount = 5;
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
//connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Default;
connectionInfo.SkipCACheck = true;
connectionInfo.SkipCNCheck = true;
connectionInfo.SkipRevocationCheck = true;
Runspace remoteRunspace=null;
try
{
   remoteRunspace = RunspaceFactory.CreateRunspace(connectionInfo);
   remoteRunspace.Open();
}
catch (Exception err)
{
    //Handle error 
}
...