【问题标题】:Connecting to remote server failed using WinRM from PowerShell使用 PowerShell 中的 WinRM 连接到远程服务器失败
【发布时间】:2013-04-07 06:24:32
【问题描述】:

我正在尝试将 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();

我错过了什么?

【问题讨论】:

  • 您是否尝试检查错误消息中提到的内容?

标签: c# powershell winrm


【解决方案1】:

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

  • 使用 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"}

【讨论】:

  • 是的,我明白了:“WinRM 已经设置为在这台机器上接收请求。WinRM 已经设置为在这台机器上进行远程管理。”
  • @woolford 是同一个域的客户端和服务器吗?
  • 有一种方法可以使用带有自签名证书的 HTTPS:jayway.com/2011/11/21/…
  • 好的,winrm 命令仅在删除单引号时才有效。 (它仍然没有为我解决问题)。
  • 我在运行winrm set winrm/config/client @{TrustedHosts="&lt;my_host_ip&gt;"}时得到Error: Invalid use of command line
【解决方案2】:

您是否在两台机器上都启用了 winrm? 尝试在每台机器上运行winrm quickconfig 以确保启用远程连接。

【讨论】:

  • 是的,我明白了:“WinRM 已经设置为在这台机器上接收请求。WinRM 已经设置为在这台机器上进行远程管理。”
  • 尝试使用 CredSSP 身份验证。在此处查看我的答案中的步骤:stackoverflow.com/questions/15336336/…
  • CredSSP 用于允许远程计算机在连接​​到其他服务(即second-hop)时传递客户端的凭据。这种情况下的问题是客户端和服务器不在同一个域中。
  • 我明白,但我认为这将解决跨域身份验证,因为标准身份验证不起作用。
【解决方案3】:

在新客户端上进行设置,我必须:

  1. 以管理员身份运行 PowerShell

  2. 通过运行此命令并对提示回答“是”来启用 WinRM:

    winrm quickconfig
    
  3. 将主机添加到我信任的主机(1.2.3.4 是主机的 IP 地址):

    Set-Item wsman:localhost\client\trustedhosts -value 1.2.3.4
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    相关资源
    最近更新 更多