基于New-PSSession的Invoke-Command -AsJob后台作业如何实时查看输出
实现方法
有两种完全基于已创建PSSession的方案可以实现实时查看远程任务输出:
方案1:已提交异步作业的实时挂载
如果你已经通过-AsJob参数提交了远程作业,直接调用Receive-Job搭配-Wait参数即可实现类似前台挂载的效果,实时流式获取输出:
# 实时输出作业执行日志,执行完成后自动清理作业 Receive-Job -Job $j -Wait -AutoRemoveJob
参数说明:
-Wait:持续监听作业输出,直到作业执行完成才会返回控制台控制权,和前台作业体验一致-AutoRemoveJob:作业结束后自动删除作业对象,无需手动执行清理命令- 如需同时保存输出到本地变量,可追加
-OutVariable jobOutput参数,所有输出会同步存入$jobOutput变量供后续使用
说明:中途按
Ctrl+C只会中断本地输出监听,不会终止远程端的作业执行,后续可再次执行上述命令重新接入查看剩余输出。
如果使用的PowerShell版本低于5.1,不支持Receive-Job的-Wait参数,可用循环拉取的方式实现相同效果:
while ($j.State -in 'Running', 'NotStarted') { Receive-Job -Job $j -Keep Start-Sleep -Seconds 1 } # 拉取最后剩余输出并清理作业 Receive-Job -Job $j Remove-Job -Job $j
方案2:提交任务时直接前台执行
如果还未提交长耗时任务,无需添加-AsJob参数提交异步作业,直接执行Invoke-Command即可实时同步输出到本地控制台:
# 基于已创建的PSSession直接执行远程脚本,输出实时返回 Invoke-Command -Session $s -File ./reallylongtime.ps1
这种方式完全等价于将远程脚本挂载到本地前台执行,中途按Ctrl+C会同时终止远程端的脚本运行。
内容的提问来源于stack exchange,提问作者pico
相关产品推荐
相关产品推荐

