Set-LocalUser在单台计算机突然失效,WinRM身份验证失败求助
问题分析与解决
环境信息
- PowerShell 5.1
- Windows Server 2016 Standard
问题详情
使用Invoke-Command远程执行Set-LocalUser为多台机器设置本地用户密码时,Computer1正常运行,但Computer2突然出现WinRM Kerberos认证失败,错误代码0x80090311,提示域不可用,本地事件日志未发现异常。
执行脚本:
Invoke-Command -ComputerName Computer1,Computer2 -Credential $credential -ScriptBlock { $securePassword = ConvertTo-SecureString -String 'P@$$w0rd123' -AsPlainText -Force Set-LocalUser -Name User1 -Password $securePassword -Verbose }
错误信息:
[Computer2] 连接远程服务器Computer2失败,错误信息如下: WinRM 无法处理请求。使用Kerberos身份验证时出现错误代码0x80090311的错误: 无法使用此凭据登录,因为你的域不可用。请确保设备已连接到组织网络并重试。如果你之前使用其他凭据在此设备上登录,可以使用该凭据登录。 可能的原因包括: - 指定的用户名或密码无效。 - 未指定身份验证方法和用户名时使用Kerberos。 - Kerberos接受域用户名,但不接受本地用户名。 - 远程计算机名称和端口的服务主体名称(SPN)不存在。 - 客户端和远程计算机位于不同域,且两个域之间不存在信任关系。 检查上述问题后,请尝试以下操作: - 检查事件查看器中与身份验证相关的事件。 - 更改身份验证方法;将目标计算机添加到WinRM TrustedHosts配置设置或使用HTTPS传输。 请注意,TrustedHosts列表中的计算机可能未经过身份验证。 - 有关WinRM配置的更多信息,请运行以下命令: winrm help config。有关详细信息,请参阅about_Remote_Troubleshooting帮助主题。 + CategoryInfo : OpenError: (Computer2:String) [], PSRemotingTransportException + FullyQualifiedErrorId : AuthenticationFailed,PSSessionStateBroken
解决方案
1. 排查域连接与Kerberos SPN问题
- 检查Computer2域连接状态:
本地登录Computer2,执行命令验证域信任:
若返回失败,检查网络连接是否正常、能否ping通域控制器,必要时重启Computer2重新加入域。nltest /sc_query:你的域名 - 验证WinRM服务SPN:
在域控制器上执行命令,查看Computer2的SPN注册情况:
确保存在setspn -L Computer2WSMAN/Computer2和WSMAN/Computer2.你的域名两个SPN。若缺失,执行以下命令添加:setspn -A WSMAN/Computer2 Computer2 setspn -A WSMAN/Computer2.你的域名 Computer2
2. 改用NTLM认证(若使用本地凭据)
Kerberos不支持跨机器的本地用户认证,如果你使用的是Computer2的本地管理员凭据,需修改脚本使用NTLM认证,并将Computer2加入客户端的WinRM可信主机列表:
- 先在执行脚本的客户端添加可信主机:
Set-Item WSMan:\localhost\Client\TrustedHosts -Value "Computer2" -Concatenate -Force - 修改Invoke-Command脚本,指定NTLM认证:
Invoke-Command -ComputerName Computer1,Computer2 -Credential $credential -Authentication NTLM -ScriptBlock { $securePassword = ConvertTo-SecureString -String 'P@$$w0rd123' -AsPlainText -Force Set-LocalUser -Name User1 -Password $securePassword -Verbose }
3. 验证凭据有效性
确认$credential对应的账号在Computer2上拥有管理员权限,且密码未过期、未锁定。可直接在Computer2本地使用该凭据登录测试。
4. 检查WinRM服务状态
本地登录Computer2,执行命令检查WinRM服务:
Get-Service WinRM
确保服务状态为Running,启动类型为Automatic。若服务异常,重启服务:
Restart-Service WinRM -Force
内容的提问来源于stack exchange,提问作者Rod
相关产品推荐
相关产品推荐

