解决 net rpc shutdown 报错 “Could not initialise pipe winreg. Error was NT_STATUS_OBJECT_NAME_NOT_FOUND”
本文分享博主在日常生活中遇到的一个问题及解决方法,由 Gemini 1.5 Pro 002 协助生成。
在使用 net rpc shutdown
命令远程关闭 Windows 机器时,有时会遇到 Could not initialise pipe winreg. Error was NT_STATUS_OBJECT_NAME_NOT_FOUND
的错误。这通常与目标 Windows 系统上的用户帐户控制 (UAC) 以及远程注册表访问权限有关。 本文将介绍如何通过配置 LocalAccountTokenFilterPolicy
注册表项来解决这个问题。
问题背景:
net rpc shutdown
命令依赖于远程注册表访问。当 UAC 启用时,本地账户的管理员权限会被过滤,导致 net rpc shutdown
无法正常访问所需的注册表项,从而引发上述错误。
解决方案:启用 LocalAccountTokenFilterPolicy
LocalAccountTokenFilterPolicy
注册表项控制着 UAC 对本地账户的过滤行为。启用此策略,可以解决 net rpc shutdown
遇到的权限问题。 虽然手动修改注册表可以实现,但使用 PowerShell 脚本更加方便和安全。
PowerShell 脚本:
以下 PowerShell 脚本可以自动创建并设置 LocalAccountTokenFilterPolicy
的值:
1 | # 设置注册表路径 |
使用方法:
- 在目标 Windows 机器上,以管理员身份运行 PowerShell。
- 将以上代码复制到 PowerShell 窗口中并执行。
预期输出及生效:
成功执行脚本后,你会看到类似以下输出之一:
注册表项 'LocalAccountTokenFilterPolicy' 不存在,已创建并设置为 '1'
(如果注册表项之前不存在)注册表值 'LocalAccountTokenFilterPolicy' 已更新为 '1'
(如果注册表项已存在但值不为 1)注册表值 'LocalAccountTokenFilterPolicy' 已为 '1',无需更改
(如果注册表项已存在且值为 1)
根据博主的测试,修改注册表后无需重启或注销即可立即生效。
验证:
再次运行 net rpc shutdown
命令,如果配置正确,命令应该会成功执行,远程关闭目标 Windows 机器。
其他可能的解决方案:
如果问题仍然存在,可以考虑以下其他解决方案:
- 使用域账户: 如果可能,尝试使用域账户进行远程关机,域账户通常不会受到
LocalAccountTokenFilterPolicy
的影响。 - 检查防火墙: 确保目标 Windows 机器上的防火墙允许远程管理和文件和打印机共享。
- 检查网络连接: 确保 Ubuntu 机器和 Windows 机器之间网络连接正常。