Windows锁屏状态下如何以完全管理员权限运行脚本?
问题根因
锁屏状态下点击utilman(轻松使用)触发的进程,运行在Winlogon安全桌面的受限SYSTEM令牌上下文中,持有的不是完整权限的系统令牌:
- 该令牌默认剥离了操作系统核心对象(包括
win32_userprofile类WMI对象)必需的敏感特权,直接触发0x80070522 (ERROR_PRIVILEGE_NOT_HELD)报错 - 由于父进程令牌自带限制属性,你用
Get-Credential传入管理员凭据、Start-Process -Verb RunAs、第三方提权工具elevate.exe都无效:子进程会默认继承父进程的令牌限制,且锁屏下UAC提权弹窗无法在安全桌面正常完成交互授权,根本拿不到完整高权限令牌。
未锁屏状态下脚本能正常运行,是因为此时utilman运行在当前登录用户的可交互桌面上下文,只要拿到管理员提权就能获得对应操作特权,和锁屏场景的令牌逻辑完全不同。


可行解决方案
最稳定、无版本兼容问题的方案是通过计划任务中转执行,避开受限令牌继承问题:
- 提前在系统中创建手动触发的计划任务,配置项如下:
- 运行账户选择
SYSTEM,勾选「使用最高权限运行」选项 - 操作项配置为启动
powershell.exe,添加启动参数:-NoProfile -ExecutionPolicy Bypass -File "你的故障排查脚本全路径.ps1" - 自定义简单好记的任务名称,比如
UtilmanTroubleshoot
- 运行账户选择
- 修改原来点击utilman触发的入口脚本,删掉直接执行故障排查的逻辑,只保留一行触发计划任务的命令即可:
schtasks /run /tn "UtilmanTroubleshoot"
该方案的原理是Windows计划任务服务本身运行在系统完整权限上下文,手动触发启动的PowerShell进程会拿到无限制的SYSTEM令牌,自带所有操作WMI、删除用户配置文件需要的特权,完全不需要交互提权,锁屏、未锁屏状态下都能稳定运行。
避坑提示
- 不要尝试直接在utilman触发的原始PowerShell进程中调用API调整特权,受限令牌的限制是内核层面写入的,用户态脚本无法突破
- 不要在锁屏场景依赖UAC提权逻辑,安全桌面的交互限制会直接拦截所有提权弹窗流程,根本走不完授权
- 调试时可以在脚本开头加
whoami /priv | Out-File C:\priv_debug.log,对比锁屏直接触发、计划任务触发两种场景输出的特权列表,就能直观看到两种令牌的权限差异。
内容的提问来源于stack exchange,提问作者Robert Wyllyam
相关产品推荐
相关产品推荐

