PowerShell 5.1中plink远程升级后主机重启致脚本挂起的解决方法
解决plink执行远程升级后无限等待的问题
针对你用PowerShell+plink执行远程升级后,主机重启导致plink无限等待的问题,给你几个实用的解决办法:
方法1:让远程命令后台执行,plink立即退出
修改远程执行的命令,把升级命令放到后台运行,这样plink发送完命令后会直接断开连接,不用等待命令完成(包括重启)。示例:
$command = "nohup 你的升级命令 > /dev/null 2>&1 &" plink -ssh $_ -l $user -pw $password -T -batch $command
nohup确保命令在plink断开后仍能继续执行> /dev/null 2>&1屏蔽输出,避免阻塞&让命令在后台运行
方法2:用PowerShell的Start-Process设置超时
通过Start-Process启动plink,并指定超时时间,到点自动终止plink进程,继续执行后续脚本:
Start-Process -FilePath "plink.exe" ` -ArgumentList "-ssh $_ -l $user -pw $password -T -batch $command" ` -NoNewWindow ` -Wait ` -Timeout 300 # 超时时间,单位秒,这里设为5分钟
这个方法适合无法修改远程命令的场景,强制限制plink的运行时间。
方法3:利用plink的连接超时参数
plink的-w参数可以设置连接超时时间,当主机重启导致连接断开后,plink会在超时后自动退出:
plink -ssh $_ -l $user -pw $password -T -batch -w 300 $command
注意这个参数是控制连接阶段的超时,如果命令已经发送成功,主机重启后连接中断,plink可能需要等这个超时时间才会退出,效果类似方法2,但优先级低于Start-Process的超时控制。
内容的提问来源于stack exchange,提问作者Fabian Hagedorn
相关产品推荐
相关产品推荐

