使用WinSCP PowerShell脚本下载后删除远程文件失败求助
解决WinSCP PowerShell脚本下载后删除远程文件失败的问题
问题根源
- 脚本中使用了未定义的
$difference变量,WinSCP无法识别要删除的目标文件路径 - 错误提示中出现的
/Files目录与下载时的/remote路径不一致,存在路径混淆或权限不足的情况
修正后的脚本
$session.Open($sessionOptions) # 设置传输选项 $transferOptions = New-Object WinSCP.TransferOptions -Property @{ ResumeSupport = New-Object WinSCP.TransferResumeSupport -Property @{ State = [WinSCP.TransferResumeSupportState]::Off } } # 执行文件下载并捕获传输结果 $transferResult = $session.GetFiles("/remote/*.txt", "\\Local\*", $False, $transferOptions) # 检查下载过程是否存在错误 $transferResult.Check() # 遍历所有成功下载的文件,删除对应远程文件 foreach ($transfer in $transferResult.Transfers) { Write-Host "正在删除远程文件: $($transfer.RemoteFileName)" $removeResult = $session.RemoveFiles($transfer.RemoteFileName) # 验证删除操作结果 if ($removeResult.IsSuccess) { Write-Host "删除成功: $($transfer.RemoteFileName)" } else { Write-Host "删除失败: $($transfer.RemoteFileName),错误信息: $($removeResult.Failures[0].Message)" } }
关键修改说明
- 用
$transferResult接收GetFiles的返回值,该对象包含所有成功传输的文件详情 - 通过遍历
$transferResult.Transfers获取每个已下载文件的远程完整路径,确保删除的是已成功下载的文件 - 增加删除结果的检查和日志输出,便于定位删除失败的具体原因
备选批量删除方式(需谨慎使用)
如果确认下载后远程目录中不会新增匹配的文件,可以直接批量删除:
# 批量删除/remote目录下所有.txt文件 $removeResult = $session.RemoveFiles("/remote/*.txt") $removeResult.Check()
内容的提问来源于stack exchange,提问作者jmmitche
相关产品推荐
相关产品推荐

