Не удалось подключиться к удаленному серверу с помощью WinRM от PowerShell

Я пытаюсь запустить код powershell с моего компьютера на vm на моем компьютере, но я продолжаю получать эту ошибку:

Ошибка подключения к удаленному серверу со следующим сообщением об ошибке: Клиент WinRM не может обработать запрос. Если аутентификация схема отличается от Kerberos, или если клиентский компьютер не подключен к домену, то должен использоваться HTTPS-транспорт или конечный компьютер должен быть добавлен в конфигурацию TrustedHosts установка. Используйте winrm.cmd для настройки TrustedHosts. Обратите внимание, что компьютеры в списке TrustedHosts может быть не аутентифицирован. Вы можете получить больше информацию об этом, выполнив следующую команду: winrm help конфигурации. Для получения дополнительной информации см. About_Remote_Troubleshooting Раздел справки.

мой код:

  string runasUsername = @"\aaa";
    string runasPassword = "aaa";
    SecureString ssRunasPassword = new SecureString();
    foreach (char x in runasPassword)
        ssRunasPassword.AppendChar(x);
    PSCredential credentials = new PSCredential(runasUsername, ssRunasPassword);

    var connInfo = new WSManConnectionInfo(new Uri("http://10.0.5.35/PowerShell"),
        "http://schemas.microsoft.com/powershell/Microsoft.Exchange",credentials);
    connInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;

    var runspace = RunspaceFactory.CreateRunspace(connInfo);


    var domainName = "domainName.COM";
    var password = "ActiveDirectoryPassword1234";
    var ssPassword = new SecureString();
    foreach (char c in password)
        ssPassword.AppendChar(c);


    var command = new Command("New-Mailbox");

    command.Parameters.Add("FirstName", firstName);
    command.Parameters.Add("LastName", lastName);
    command.Parameters.Add("Password", ssPassword);
    command.Parameters.Add("ResetPasswordOnNextLogon", false);
    command.Parameters.Add("OrganizationalUnit", "NeumontStudents");

    runspace.Open(); <--//error here
    var pipeline = runspace.CreatePipeline();
    pipeline.Commands.Add(command);


    var results = pipeline.Invoke();

    runspace.Dispose();

Что мне не хватает?

Ответ 1

Если клиент и удаленный компьютер не находятся в одном домене, у вас есть один из двух вариантов:

  • использовать протокол HTTPS в качестве транспортного протокола
  • добавить удаленный компьютер в список доверенных хостов на клиенте

Чтобы настроить WinRM для использования HTTPS, откройте консоль PowerShell как администратор на обеих машинах и запустите:

winrm quickconfig -transport:https

и открыть порт 5986 на брандмауэре:

netsh firewall add portopening TCP 5986 "WinRM over HTTPS"

Кроме того, вы можете добавить удаленный компьютер в качестве доверенного хоста на клиенте, выполнив:

winrm set winrm/config/client '@{TrustedHosts="10.0.5.35"}'

Ответ 2

Вы включили winrm на обеих машинах? попробуйте запустить winrm quickconfig на каждом компьютере, чтобы обеспечить возможность удаленного подключения.