使用PowerShell中的WinRM连接到远程服务器失败

时间:2013-04-15 07:44:06

标签: c# powershell winrm

我正在尝试从我的计算机上运行PowerShell代码到我的计算机上的vm,但我一直收到此错误:

  

连接到远程服务器失败,并显示以下错误消息:   WinRM客户端无法处理请求。如果是身份验证   scheme与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();

我错过了什么?

2 个答案:

答案 0 :(得分:22)

如果客户端和远程计算机不是在同一个域,则您有以下两种选择之一:

  • 使用HTTPS作为传输协议
  • 将远程计算机添加到客户端上的可信主机列表

configure 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"}

答案 1 :(得分:1)

你在两台机器上启用了winrm吗? 尝试在每台计算机上运行winrm quickconfig以确保启用远程连接。