“上次运行结果:0x1”根本原因是任务未在预期账户上下文和权限级别下执行,需依次确认:勾选“不管用户是否登录都要运行”并正确输入密码;勾选“使用最高权限运行”;在“起始于”栏设置脚本绝对路径;确保运行账户对脚本目录具备读取与执行权限;检查eventlog customsd权限、defender实时防护及powershell执行策略。

Windows 10任务计划程序显示“上次运行结果:0x1”,但脚本手动执行完全正常,说明任务已启动、进程已拉起,却在执行中途被系统权限机制拦截退出——这种典型现象背后往往不是代码缺陷,而是账户上下文、资源访问路径或安全策略的隐性拒绝。
确认任务是否真在目标账户上下文中运行
任务计划程序界面里写的“运行用户”只是配置项,不等于实际执行身份。右键任务→“属性”→“常规”选项卡,检查“不管用户是否登录都要运行”是否勾选。若未勾选,任务只在该用户交互式登录时才运行;若已勾选但没输密码,系统会静默降权为“空会话”,导致绝大多数文件/注册表/网络操作失败并返回0x1。
点击“更改用户或组”,输入完整域名\用户名(如DESKTOP-ABC\Administrator),再点“检查名称”确保解析成功。随后必须输入该账户当前有效密码——这一步不可跳过,否则任务将始终以受限令牌运行。
【必须填密码】哪怕你选的是SYSTEM账户,也需点击“更改用户或组”后重新输入SYSTEM并留空密码(系统自动识别),否则任务可能继承调用者低完整性令牌。
验证任务是否获得足够进程权限
在“常规”选项卡中,务必勾选“使用最高权限运行”。这一选项强制任务以高完整性级别(High IL)启动,绕过UAC虚拟化和部分文件重定向限制。
不勾选时,即使账户是Administrator,任务也可能被降权为中等完整性级别(Medium IL),导致写入Program Files、访问HKEY_LOCAL_MACHINE\SOFTWARE或调用某些COM组件时静默失败并返回0x1。
注意:“使用最高权限运行”与“以管理员身份运行”不是一回事——前者由任务计划服务在创建进程时注入TOKEN_PRIVILEGES,后者是shell层提示。任务计划中不勾此项,PowerShell脚本里的Start-Process -Verb RunAs也无法生效。
检查脚本依赖路径的访问权限
方法一:用绝对路径显式声明工作目录
进入“操作”选项卡→“编辑”→在“起始于(可选)”栏中填入脚本所在文件夹的完整路径,末尾带反斜杠,例如:C:\Scripts\。不填此项时,任务默认工作目录是C:\Windows\System32,所有相对路径(如config.json、./lib/utils.py)都会查找失败,Python解释器直接抛出FileNotFoundError并退出码1。
方法二:在脚本开头主动切换工作目录
若用PowerShell,第一行加Set-Location $PSScriptRoot;若用Python,在import前加os.chdir(os.path.dirname(os.path.abspath(__file__)))。这能兜底应对“起始于”未配置或配置错误的情况。
方法三:校验关键路径的实际ACL
右键脚本所在文件夹→“属性”→“安全”选项卡→“高级”,确认运行账户(如Administrators或具体用户名)拥有“遍历文件夹/执行文件”、“读取数据/列出文件夹”、“读取属性”三项基础权限。缺少任一项,cmd.exe或python.exe进程启动后立即因无法读取自身脚本内容而退出,返回0x1。
排查系统级权限策略干扰
第一步:确认Task Scheduler服务本身有写日志权限
按Win+R输入regedit,定位到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\System\CustomSD,双击右侧的CustomSD值,检查字符串中是否包含(A;;0xf0007;;;SY)。缺失则SYSTEM账户无权写系统事件日志,会导致任务计划服务降级运行,间接引发子进程权限异常。
第二步:禁用Windows Defender实时防护临时测试
打开Windows安全中心→“病毒和威胁防护”→“管理设置”→关闭“实时保护”。某些Defender策略会拦截非签名脚本的进程创建行为,不报错、不弹窗,仅让进程秒退并返回0x1。测试后若恢复正常,需将脚本路径加入排除列表而非永久关防护。
第三步:检查PowerShell执行策略(仅限.ps1脚本)
以任务所用账户身份打开PowerShell,运行Get-ExecutionPolicy -List。若MachinePolicy或UserPolicy显示Restricted,即使脚本本身无问题,PowerShell也会拒绝加载并退出码1。此时需用管理员PowerShell运行:Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。











