如何在后台运行Windows PowerShell脚本 实现登出后仍正常执行
PowerShell 后台运行及登出后保持执行方案
1. 等同Unix &运算符的普通后台运行方案
如果仅需要在当前用户登录、PowerShell会话保持期间后台运行脚本,和Unix & 功能完全对等的实现是使用Start-Job命令:
- 运行自定义脚本逻辑:
Start-Job -ScriptBlock { # 此处填入你要执行的代码 } - 运行本地.ps1脚本文件:
Start-Job -FilePath C:\你的\脚本\路径\test.ps1 - 常用配套操作命令:
- 查看所有后台任务:
Get-Job - 查看指定任务的输出结果:
Receive-Job -Id <任务ID> - 终止运行中的后台任务:
Stop-Job -Id <任务ID>
- 查看所有后台任务:
注意:该方案仅在当前PowerShell会话开启、用户处于登录状态时生效,关闭会话或登出系统后任务会自动终止。
2. 用户登出后仍可持续运行的持久化方案
如果需要脚本不受用户登出影响持续运行,推荐以下两种原生实现方案:
方案1:注册计划任务(最推荐,适配绝大多数场景)
PowerShell 自带的Register-ScheduledJob命令可以直接创建系统级计划任务,支持配置「无论用户是否登录都运行」的规则:
# 1. 配置触发规则,示例为2024年5月20日14点一次性触发,可根据需求修改为定时/开机触发等 $trigger = New-JobTrigger -Once -At "2024/05/20 14:00" # 2. 配置运行规则:无论用户是否登录都运行 $jobOption = New-ScheduledJobOption -RunWhetherLoggedOnOrNot # 3. 注册持久化后台任务 Register-ScheduledJob -Name "你的后台任务名称" -FilePath C:\你的\脚本\路径\test.ps1 -Trigger $trigger -ScheduledJobOption $jobOption
- 查看已创建的持久化任务:
Get-ScheduledJob - 不需要时删除任务:
Unregister-ScheduledJob -Name "你的后台任务名称"
方案2:封装为系统服务(适合长期驻留的脚本)
如果脚本需要作为常驻后台进程运行,可以直接创建Windows系统服务,默认以系统账户运行,完全不受用户登录状态影响:
- 示例创建命令:
sc create "自定义服务名称" binPath= "powershell.exe -ExecutionPolicy Bypass -File C:\你的\脚本\路径\test.ps1" start= auto
注意:
binPath=和后面的路径之间必须保留一个空格,否则命令会执行失败。
常见注意事项
- 建议给持久化运行的脚本添加日志输出,可在脚本开头添加
Start-Transcript -Path C:\日志\存储\路径\run.log -Append自动记录所有运行输出,方便排查问题。 - 执行脚本时如果触发系统执行策略限制,可在启动PowerShell的参数中添加
-ExecutionPolicy Bypass跳过策略校验。 - 计划任务/服务的运行权限按需配置,涉及文件读写、网络请求等操作时确保对应运行账户有足够权限。
内容的提问来源于stack exchange,提问作者user12483956
相关产品推荐
相关产品推荐

