You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Windows Server 2016中无需任务计划程序,实现PowerShell 7.1.5脚本脱离会话持续后台运行的方法

在Windows Server 2016上让PowerShell 7脚本脱离会话持续运行的方案

先帮你理清几个关键疑问,再给你不用任务计划的可行方法:

关于Linux的nohup &

你猜的没错,Linux的nohup和&不只是隐藏窗口:

  • &是把进程放到后台运行,不占用当前终端输入
  • nohup是让进程忽略终端关闭时发送的SIGHUP信号,即使注销系统,进程依然会持续运行,这才是核心的“脱离会话”效果。

为什么你之前的方法没用?

你试的start-job、.\test.ps1 &这些都是PowerShell会话内的作业/后台执行,它们本质上是依附于当前PowerShell会话的。当你关闭CMD/PowerShell窗口、注销系统时,整个会话会被终止,里面的所有作业也会跟着停止,所以达不到你要的效果。

不用任务计划的替代方案

方案1:用Start-Process创建独立进程

这是最简单的原生方法,不需要额外工具。它会创建一个完全独立于当前会话的pwsh进程,关闭窗口或注销后依然运行:

Start-Process -FilePath "pwsh.exe" -ArgumentList "-File C:\temp\test.ps1" -NoNewWindow -WindowStyle Hidden -PassThru
  • -PassThru会返回进程对象,你可以直接看到进程ID,方便后续管理
  • 查看运行状态:Get-Process pwsh,找到对应脚本的进程
  • 停止进程:Stop-Process -Id <进程ID>

⚠️ 注意:你脚本里用的Write-Host在后台进程里不会有任何输出,因为没有终端窗口接收。如果需要记录输出,建议修改脚本把内容写入日志:

foreach($n in (0..100)) { 
    "Hello World $n" | Add-Content -Path C:\temp\test.log -Append
    Start-Sleep -Seconds 2 
}

方案2:用Sysinternals的psexec工具

如果你需要更高权限(比如系统账户)运行脚本,可以用psexec:

psexec -s -d pwsh.exe -File C:\temp\test.ps1
  • -s:以系统账户运行,权限更高,适合需要访问系统级资源的脚本
  • -d:不等待脚本执行完成,直接返回,让脚本在后台独立运行
  • 注意:需要先下载psexec(属于Sysinternals Suite),放到系统PATH目录或者指定完整路径使用。

关于任务计划的疑问

你担心任务计划每分钟检查占用资源?其实完全没必要:

  • 任务计划的“每分钟检查”只是一个触发条件,当设置了“如果任务已在运行则不启动新实例”后,只有当脚本没在运行时才会执行,资源消耗几乎可以忽略。
  • 而且任务计划是官方推荐的最稳定的后台运行方式,可以设置失败重试、日志记录、运行权限等,其实是长期运行脚本的最优解。

核心问题解答:任务计划是唯一方式吗?

不是。上面的Start-Process和psexec都能实现脱离会话持续运行的效果,但任务计划是最可控、最易管理的方式。如果实在不想用,优先选择Start-Process的原生方案。

内容的提问来源于stack exchange,提问作者learntofix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 23:42:35