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

如何在远程SSH机器上启动断开重连仍运行的PowerShell会话?

用PowerShell实现断开SSH后仍持续运行的会话

创建持久化PSSession

在远程机器上创建一个命名的持久会话,这个会话不会随VS Code终端关闭而终止:

$session = New-PSSession -Name "PersistentTaskSession"

在会话中启动后台任务

用Invoke-Command配合-AsJob,把需要持续运行的脚本放到这个独立会话里执行:

Invoke-Command -Session $session -ScriptBlock {
    # 示例:每隔1分钟记录一次时间到日志文件
    while ($true) {
        Get-Date | Out-File "C:\temp\persistent_task_log.txt" -Append
        Start-Sleep -Seconds 60
    }
} -AsJob

-AsJob会把任务转为后台作业,即使你断开当前终端,作业也会在PSSession里继续运行。

重新连接后恢复会话

下次通过VS Code连回远程机器时,重新获取并进入这个会话:

# 获取之前创建的会话
$session = Get-PSSession -Name "PersistentTaskSession"
# 进入会话
Enter-PSSession -Session $session

之后可以查看作业状态或输出:

# 查看会话内的作业
Get-Job -Session $session
# 获取作业输出(-Keep参数保留输出记录)
Receive-Job -Job (Get-Job -Session $session) -Keep

关键注意点

  • PSSession默认有闲置超时时间,超过时间会自动终止,可通过管理员权限修改超时:
    Set-PSSessionConfiguration -Name Microsoft.PowerShell -IdleTimeoutSec 86400 # 设置为1天
    
  • 如果你的任务需要交互式操作,tmux依然是更合适的选择,PSSession更适配后台非交互式任务。
  • Start-Job失效的原因是它的作业依附于当前终端的PowerShell进程,终端关闭进程就终止,而PSSession是独立的系统级会话,不受终端进程影响。

内容的提问来源于stack exchange,提问作者Marko Grdinić

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:45:05