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

我试图从我的计算机上运行PowerShell代码到我的计算机上的vm,但我不断收到此错误:

连接到远程服务器失败,并显示以下错误消息:WinRM客户端无法处理该请求。 如果身份validation方案与Kerberos不同,或者客户端计算机未加入域,则必须使用HTTPS传输,或者必须将目标计算机添加到TrustedHosts配置设置。 使用winrm.cmd配置TrustedHosts。 请注意,TrustedHosts列表中的计算机可能未经过身份validation。 您可以通过运行以下命令获取有关该信息的更多信息:winrm help config。 有关详细信息,请参阅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(); 

我错过了什么?

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

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

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