如何在PowerShell中订阅重启/关机事件以执行清理操作
实现关机/重启时自动执行PowerShell清理操作
你用Register-ObjectEvent的方法之所以失效,是因为该命令注册的事件依赖当前PowerShell会话存活,而系统关机/重启时会直接终止所有用户会话,事件动作根本来不及执行。下面是两种可靠的实现方案:
方案一:使用本地组策略关机脚本
适合域环境或单台机器的批量配置:
- 按下
Win+R输入gpedit.msc打开本地组策略编辑器 - 导航路径:计算机配置 > Windows 设置 > 脚本(关机/开机)
- 双击「关机」选项,点击「添加」,选择你的清理脚本文件
- 脚本内容示例(直接编写删除/重命名逻辑,用绝对路径):
# 清理操作:删除指定文件 Remove-Item -Path "C:\Your\Path\FileToDelete1.txt" -Force Remove-Item -Path "C:\Your\Path\FileToDelete2.txt" -Force # 重命名指定文件 Rename-Item -Path "C:\Your\Path\OldFileName1.txt" -NewName "NewFileName1.txt" -Force Rename-Item -Path "C:\Your\Path\OldFileName2.txt" -NewName "NewFileName2.txt" -Force
方案二:使用任务计划程序触发
适合单台机器的灵活配置:
- 打开「任务计划程序」,点击「创建基本任务」
- 命名任务(比如「关机清理脚本」),点击下一步
- 触发器选择「在事件时」,日志选「系统」,源选「User32」,事件ID填
1074(对应系统关机/重启事件),点击下一步 - 操作选择「启动程序」,程序/脚本填
powershell.exe,添加参数填写:
-ExecutionPolicy Bypass -File "C:\Your\Full\Path\To\CleanupScript.ps1"
- 勾选「当单击完成时,打开此任务属性的对话框」,点击完成后:
- 切换到「设置」标签,勾选「不管用户是否登录都要运行」
- 勾选「以最高权限运行」(避免权限不足导致操作失败)
- 确认「配置为」选项匹配你的Windows版本
注意事项
- 所有文件路径必须使用绝对路径,不能用相对路径
- 如果系统执行策略限制脚本运行,必须在参数中加入
-ExecutionPolicy Bypass - 测试时可手动触发任务,或用
shutdown /r /t 10执行重启测试
内容的提问来源于stack exchange,提问作者wads
相关产品推荐
相关产品推荐

