Linux环境Powershell使用Copy-Item向远程Windows传输大于275K文件失败
问题根因
你遇到的是PowerShell 7.1.x版本在Linux环境下通过WinRM协议进行远程文件传输的已知缺陷:该版本内置的WSMan客户端分片传输逻辑存在校验bug,默认传输阈值约为275KB,超过该大小的文件传输时会因为ACK报文识别失败导致会话无限期挂死,同时该版本的Linux PowerShell对SIGINT信号处理存在问题,因此CTRL+C无法终止挂死的传输进程。
你排除服务器配置、容器本地权限和ulimit限制的验证逻辑完全成立,问题确实出在PowerShell本身的版本缺陷上。
解决方案
方案1:升级PowerShell版本(推荐)
该传输bug已经在PowerShell 7.2及后续版本中完成修复,将Debian容器内的PowerShell升级到7.2以上的正式版本即可直接解决问题,无需修改原有传输逻辑。
方案2:低版本临时规避
如果暂时无法升级PowerShell版本,可以在Copy-Item命令中手动指定小于阈值的缓冲区大小,绕开缺陷触发条件:
# 指定256KB缓冲区,大文件会自动拆分传输 Copy-Item -ToSession $copy_session /tmp/280k.txt -Destination F:\280k.txt -BufferSize 262144
方案3:替代传输方案
你已经验证同环境下SCP传输正常,可以直接在PowerShell中调用SCP命令完成文件传输,绕开PSRemoting的传输模块缺陷。
内容的提问来源于stack exchange,提问作者Craig Souder
相关产品推荐
相关产品推荐

