电脑无人值守:自动唤醒 + 自启配置
要解决的问题
本机型自动化(定时任务、应用内计划任务)绑定在本机 WorkBuddy/应用运行时上:电脑关机或没开机,到点不触发,当天产出缺失。
解法分层,按"依赖程度从轻到重"提供三条路线:
| 路线 | 是否依赖本机开机 | 适用 |
|---|---|---|
| A. 唤醒任务(本技能核心) | 睡眠/正常关机可无人值守;彻底断电不行 | 绝大多数场景 |
| B. 本机漏跑补跑 | 当天至少开一次 | 简单兜底 |
| C. 搬云服务器 cron | 完全不依赖 | 最彻底,代价是要有云资源 |
第一步:电源体检(必做,决定后续路线)
powercfg /a # 支持的睡眠状态
- 有 S3 待机:传统睡眠,唤醒定时器可靠。
- 只有 S0 低电量待机(Modern Standby):常见于较新笔记本;唤醒定时器同样有效(以本机实测为准)。
- 有 休眠:可作唤醒目标。
再查两项:
# 快速启动(决定"开始菜单关机"能否被唤醒任务叫醒)
(Get-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Power").HiberbootEnabled
# 值=1 → 正常"关机"是混合休眠(近似休眠),唤醒任务大概率能叫醒;
# 值=0 → 关机即彻底断电,只能靠 BIOS 定时通电。
第二步:创建唤醒任务(Windows 侧核心动作)
用 scripts/Setup-WakeTask.ps1,一条命令创建带 WakeToRun 的计划任务:
powershell -ExecutionPolicy Bypass -File scripts\Setup-WakeTask.ps1 `
-TaskName "自动化-开机预备-唤醒" `
-AppPath "D:\workbuddy\WorkBuddy.exe" `
-At "06:50" -ExecutionTimeLimitMinutes 10
脚本自动完成:
- 触发器:工作日(周一~周五)HH:MM
- WakeToRun = $true(关键:允许唤醒计算机运行此任务)
- StartWhenAvailable = true(错过触发时机后补跑一次)
- 电池许可:AllowStartIfOnBatteries=true + DontStopIfGoingOnBatteries=true(笔记本必须,没插电也要能醒)
- ExecutionTimeLimit 限制在 N 分钟(防止任务卡死占资源)
- 幂等:-Force 覆盖同名任务,可重复执行
创建后必须验证:
$t = Get-ScheduledTask -TaskName "自动化-开机预备-唤醒"
$t.Settings.WakeToRun # 必须为 True
$t.Triggers | Select StartBoundary, DaysOfWeek
> 注意:powercfg /waketimers 需管理员权限;任务里 WakeToRun 是否生效以 Get-ScheduledTask 读出的属性为准。
第三步:开机自启(应用/客户端)
唤醒只让机器亮起来,还要保证应用启动。把应用快捷方式放进当前用户 Startup 目录:
$startup = "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Startup"
# 若有现成快捷方式(开始菜单里一般有),直接拷贝:
Copy-Item "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\<App>.lnk" $startup
# 或手动创建一个 .lnk(本技能不代替用户做快捷方式创建,交由用户/桌面手动处理)
同时要确认应用自身保持登录态(应用内账号会话过期则自启也白搭)。
第四步:账户与自动登录
先判断账户是否有密码:
net user $env:USERNAME | Select-String "需要密码"
| 账户状态 | 唤醒/开机后表现 | 处理 |
|---|---|---|
| 空密码(需要密码=No) | 睡眠/混合关机唤醒=会话恢复,直接回桌面;彻底冷启动才停登录页 | 多数情况无需配自动登录 |
| 有密码 | 停登录页,需输入密码 → 应用起不来 | 按需配自动登录 |
空密码账户配自动登录(无明文密码风险,推荐)——需管理员权限执行:
# 弹 UAC 属正常;空密码不存任何机密
$w = "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon"
Set-ItemProperty $w AutoAdminLogon -Value "1" -Type String
Set-ItemProperty $w DefaultUserName -Value $env:USERNAME -Type String
Set-ItemProperty $w DefaultPassword -Value "" -Type String
Set-ItemProperty $w DefaultDomainName -Value $env:COMPUTERNAME -Type String
有密码账户:Win+R → netplwiz → 取消勾选「要使用本计算机,用户必须输入用户名和密码」→ 输密码两次。
注意:无密码账户 netplwiz 不显示该复选框(系统特性,不是故障)。
第五步:彻底断电兜底(仅笔记本无电池/台式机断电场景)
只有"彻底断电后 CMOS 掉电"才需要。带电池的笔记本基本不需要(电池兜底)。
BIOS 内开启「定时开机 / Power On By Alarm / RTC Alarm Power On / 电源定时开机」(各品牌叫法不同,一般在电源管理/APM 菜单),时间设在唤醒任务前 5~10 分钟,重复=每天,F10 保存。
第六步:验证与排障
验证清单(次日早):
1. 机器到点自己醒了(键盘/风扇/电源灯);
2. 产出文件按约定路径生成;
3. 任务计划程序 → 该任务 → 历史记录(需先在右侧"启用所有任务历史记录")。
| 故障现象 | 排查 |
|---|---|
| 任务"准备就绪"但机器没醒 | ① 电源选项→更改高级电源设置→「允许唤醒定时器=启用」;② 是否彻底断电(BIOS 路线) |
| 醒了但产出没有 | ① 自动登录没配(会话没起来);② 应用登录态过期;③ 看任务历史/上次运行结果 |
| 笔记本在包里被唤醒发热 | 设计使然:唤醒任务在合盖睡眠下也会醒。外带前改为"关机"而非睡眠 |
| 重复生成 | 生成端做幂等:产出文件已存在且非空则跳过 |
配套:漏跑补跑(可选增强)
本机方案 B:主任务生成端改为幂等(先查当天产出文件是否存在,存在即跳过),再补 1~2 个 8:00/9:00 补跑任务,用户任意时刻开机即补齐。
路线 C:云服务器(彻底不依赖本机)
把生成逻辑搬到 24h 在线服务器(如轻量应用服务器)跑 cron/计划任务,结果推送(企业微信/邮件/对象存储)。适合"常年关机/常年外出"场景。需要云资源与推送通道。
脚本清单
| 脚本 | 用途 |
|---|---|
scripts/Setup-WakeTask.ps1 |
创建/更新唤醒任务(参数化:任务名、应用路径、时间、电池许可) |
scripts/Check-Unattended.ps1 |
一键体检:睡眠状态、快速启动、自动登录、已有唤醒任务、Startup 项 |