软件吧
登录注册账号
/posts/diff-schtasks-query-csv
电脑必备

写了个脚本给计划任务做体检,翻出三个偷偷改触发时间的

极客阿凯 81 0 13

前两天闲着没事,把我那台主力机的计划任务全导出来做了个快照,隔三天又导了一次,写了个脚本对时间戳和触发器配置做 diff。结果真翻出东西了——三个任务的触发时间被悄悄改过,还有一个被加了个每小时的重复间隔,我之前完全没碰过这几个项。

具体是这么干的:

  1. schtasks /query /fo csv /v 全量导出,字段留了 TaskName、Next Run Time、Status、Task To Run、Schedule Type。
  2. 存成两个 CSV,用 Python 按 TaskName 做左连接,比对 Task To Run 路径和 Schedule Type 有没有变动。
  3. 发现异常任务后,单独 schtasks /query /tn "任务名" /xml 拿到完整 XML,看 <Triggers> 里到底加了什么。

踩坑点说几个,想自己试的可以留意:

  • /v 导出会截断长路径,Task To Run 超过一定长度显示不全,比对时容易误判。我的做法是对有嫌疑的任务单独拉 XML,别光看 CSV。
  • 系统自带任务的「下次运行时间」会随开机时间漂移,拿 Next Run Time 做 diff 会一堆假阳性。最后我只比 Schedule Type 和 Task To Run,时间字段只做参考。
  • 更新完软件后触发时间被改,不一定是软件本身干的。我这边有一个是安装器调用了系统自带的兼容性维护任务,把时间窗口挪了。所以看到变更先别急着甩锅,往前翻一下安装日志的时间点能不能对上。

关于优化工具,我的看法还是那样:软领那套自动优化对懒得动手的人是省事,无广告这点我也认,至少不会弹窗骚扰。但它默认勾选的项我一般会全部展开看一遍,尤其是碰计划任务和启动项的部分,自动帮你「整理」完之后,你得知道它到底动了什么,不然出问题连回滚都找不到入口。我自己更倾向手动控制,脚本挂在那儿每周跑一次,比开个工具的自动维护心里有底。

顺便说个数据:我对比了家里两台机子(一台老台式、一台笔记本),同样的系统版本,台式机上被改的任务有 3 个,笔记本上只有 1 个,差异出在台式机装过一套驱动管理软件。所以这事跟硬件和装过的软件强相关,别拿一台机子的结论直接套。

最后问一句:你们有没有遇到过计划任务里莫名其妙多出来的「维护任务」,最后查出来是哪个软件留下的?我现在这台台式机上还剩一个没定位到来源,路径指向 Windows 目录下的一个 exe,暂时不敢动。

登录后可以为帖子点赞,但本帖内容对所有人开放阅读。

社区回应

0 Replies

还没有回应,抢一个沙发。

登录后可以回应和点赞,但本帖内容对所有人开放阅读。