WinRM无法处理请求 - 仅在特定域上失败

g3n*_*1t0 13 powershell powershell-2.0 powershell-remoting winrm

我们的一些服务器(W2K8 R2)上周被移动到云端,一旦我的powerswhell脚本开始失败(之前工作正常),在尝试建立连接的行上抛出异常,

$ExSession = New-PSSession –ConfigurationName Microsoft.Exchange –ConnectionUri     "http://$g_strExchangeServer/PowerShell" `
-Credential $Credentials –Authentication Kerberos
Run Code Online (Sandbox Code Playgroud)

通过以下消息,

[subd.staging.com] Connecting to remote server failed with the following error message : 
**WinRM cannot process the request**. The following error occured while using Kerberos authentication: There are currently no logon servers available to service the logon request.  
Possible causes are:
-The user name or password specified are invalid.
-Kerberos is used when no authentication method and no user name are specified.
-Kerberos accepts domain user names, but not local user names.
-The Service Principal Name (SPN) for the remote computer name and port does not exist.
-The client and remote computers are in different domains and there is no trust between the two domains.
After checking for the above issues, try the following:
-Check the Event Viewer for events related to authentication.
-Change the authentication method; add the destination computer to the WinRM TrustedHosts configuration setting or use HTTPS transport.
Note that computers in the TrustedHosts list might not be authenticated.
-For more information about WinRM configuration, run the following command: winrm help onfig. For more information, see the about_Remote_Troubleshooting Help topic.
+ CategoryInfo          : OpenError: (System.Manageme....RemoteRunspace:RemoteRunspace) [], PSRemotingTransportException
+ FullyQualifiedErrorId : PSSessionOpenFailed
Run Code Online (Sandbox Code Playgroud)

只有当我尝试定位我们的测试域时才会发生这种情况,如果我将脚本指向我们的生产域然后它可以工作.

所有已移至云端的服务器上都会显示相同的错误.

请注意,尚未迁移到云的所有服务器都能够在两个域上运行脚本而不会出现任何问题.

我试过以下,但没有运气.

//Add the destination computer to the WinRM TrustedHosts configuration setting. 
c:\>WinRM set winrm/config/client @{TrustedHosts="stagingserver"} 


//Confirm that WinRM is properly configured.  
c:\>Winrm quickconfig  

//Make sure that the remote server allows commands from any machine. 
PS c:\>Set-item wsman:localhost\client\trustedhosts -value * 
Run Code Online (Sandbox Code Playgroud)

使用Powershell v2和WinRM v2

欢迎任何评论.

小智 25

在客户端计算机上运行这些命令,然后尝试访问远程主机:

首先,我们需要检查客户端计算机上的TrustedHosts:

PS C:\> WinRM get winrm/config/client
Client
    NetworkDelayms = 5000
    URLPrefix = wsman
    AllowUnencrypted = false
    Auth
        Basic = true
        Digest = true
        Kerberos = true
        Negotiate = true
        Certificate = true
        CredSSP = false
    DefaultPorts
        HTTP = 5985
        HTTPS = 5986
    TrustedHosts
Run Code Online (Sandbox Code Playgroud)

如果它在示例中为空,请在客户端计算机上运行以下命令:

PS C:> Set-item wsman:localhost\client\trustedhosts -value*

这将在TrustedHosts参数中写入*,该参数将允许客户端计算机连接到任何主机,或者您可以使用目标服务器的ip和/或主机名配置此值.

PS C:\> WinRM get winrm/config/client
Client
    NetworkDelayms = 5000
    URLPrefix = wsman
    AllowUnencrypted = false
    Auth
        Basic = true
        Digest = true
        Kerberos = true
        Negotiate = true
        Certificate = true
        CredSSP = false
    DefaultPorts
        HTTP = 5985
        HTTPS = 5986
    TrustedHosts = *
Run Code Online (Sandbox Code Playgroud)

  • 注意,此命令需要在客户端计算机上执行,即建立连接的命令 - 而不是在目标主机上执行.之后可能需要重新启动WinRM服务. (5认同)
  • 需要使用Powershell作为第二个命令的管理员(右键单击"以管理员身份运行"). (2认同)