invoke-command似乎不起作用 - 我是否使用winrm.cmd正确配置TrustedHosts?

时间:2014-08-27 17:41:09

标签: powershell winrm trusted

我不确定我是否使用winrmcmd正确配置TrustedHosts

我在PowerShell中从host_computer(工作组的一部分)运行命令

$cred = Get-Credential -credential user

出现提示,我输入密码

enter image description here

然后我执行一个命令,这样setup.exe将在remote_computer(也是工作组的一部分)上执行

invoke-command -ComputerName remote_computer -credential $cred -scriptBlock {& 'C:\share\setup.exe'}

出现错误:

[remote_computer] Connecting to remote server remote_computer failed with the following error message : The WinRM client cannot process the request. If the authentication scheme is different from Kerberos, or if the client 
computer is not joined to a domain, then HTTPS transport must be used or the destination machine must be added to the TrustedHosts configuration setting. Use winrm.cmd to configure TrustedHosts. Note that computers in the 
TrustedHosts list might not be authenticated. You can get more information about that by running the following command: winrm help config. For more information, see the about_Remote_Troubleshooting Help topic.
    + CategoryInfo          : OpenError: (remote_computer:String) [], PSRemotingTransportException
    + FullyQualifiedErrorId : ServerNotTrusted,PSSessionStateBroken

我按照http://pubs.vmware.com/orchestrator-plugins/index.jsp#com.vmware.using.powershell.plugin.doc_10/GUID-D4ACA4EF-D018-448A-866A-DECDDA5CC3C1.html

的步骤进行操作

在host_computer上打开命令提示符(shift,右键单击,选择"以管理员身份运行")并执行以下

C:\Windows\system32>winrm quickconfig

C:\Windows\system32>winrm e winrm/config/listener

C:\Windows\system32>winrm get winrm/config

C:\Windows\system32>winrm set winrm/config/service/auth @{Basic="true"}

C:\Windows\system32>winrm set winrm/config/service @{AllowUnencrypted="true"}

C:\Windows\system32>winrm set winrm/config/client @{TrustedHosts="remote_computer"}

在remote_computer上打开命令提示符(shift,右键单击,选择"以管理员身份运行")并执行以下

C:\Windows\system32>winrm get winrm/config

C:\Windows\system32>winrm set winrm/config/client/auth @{Basic="true"}

C:\Windows\system32>winrm set winrm/config/client @{AllowUnencrypted="true"}

C:\Windows\system32>winrm set winrm/config/client @{TrustedHosts="host_computer"}

C:\Windows\system32>winrm identify -r:http://host_computer:5985 -auth:basic -u:user -p:password -encoding:utf-8

我得到以下回复

IdentifyResponse
    ProtocolVersion = http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
    ProductVendor = Microsoft Corporation
    ProductVersion = OS: 6.3.9600 SP: 0.0 Stack: 3.0
    SecurityProfiles
        SecurityProfileName = http://schemas.dmtf.org/wbem/wsman/1/wsman/secprof
ile/http/basic, http://schemas.dmtf.org/wbem/wsman/1/wsman/secprofile/http/spneg
o-kerberos

现在我去host_computer并执行

invoke-command -ComputerName remote_computer -credential $cred -scriptBlock {& 'C:\share\setup.exe'}

我不再收到任何错误消息,但是当我远程访问remote_host时,我在任务管理器中看不到setup.exe。已经超过半小时了,我找不到任何证据证明文件已经执行了。

如何解决问题?

3 个答案:

答案 0 :(得分:0)

使用wmirm.cmd添加TrustedHosts后(参见OP),以下命令有效

invoke-command -ComputerName remote_Computer -credential $cred -scriptBlock {cmd /c 'C:\share\setup.exe'}

答案 1 :(得分:0)

除了在machineA和machineB上禁用防火墙,并在机器A上执行winrm set winrm/config/client @{TrustedHosts="machineB"}之外,我还可以调用Invoke-Command -FilePath c:\scripts\test.ps1 -ComputerName machineB

此链接也很有帮助 http://pubs.vmware.com/orchestrator-plugins/index.jsp?topic=%2Fcom.vmware.using.powershell.plugin.doc_10%2FGUID-D4ACA4EF-D018-448A-866A-DECDDA5CC3C1.html

答案 2 :(得分:0)

我知道这是一个古老的问题,但是它可能会对没有找到答案的人有所帮助。因此,WinRM类似于基于SOAP Web的Web API,当您想在非AD环境中使用此API时,可能会遇到与安全性相关的各种问题。您应该了解的第一件事是,不仅必须配置服务器端,还必须配置客户端!

例如,如果您将远程计算机配置为不使用HTTPS并将管理员的计算机添加到受信任的主机,则您还必须在管理员的计算机上执行(从中发起会话):

Set-Item wsman:\localhost\client\trustedhosts <target machine> 

将目标(目标)计算机添加到受信任列表。

您可以很容易地看到错误是否如下:“ WinRM客户端无法处理请求。如果身份验证方案为 与Kerberos不同,或者如果客户端计算机未加入域,则必须使用HTTPS传输,或者必须将目标计算机添加到TrustedHosts “它会告诉您有关客户端问题(“ WinRM客户端无法处理”)的信息。此外,在这种情况下,您将看不到机器之间的任何TCP / HTTP WinRM相关流量,因为客户端不会这样做。开始互动并引发错误。