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

如何在PowerShell中通过WinSCP .NET组件显示单文件下载完成提示

实现单个FTP文件下载完成时实时提示

你的脚本当前是在所有文件下载完成后,通过遍历$transferResult.Transfers输出提示,所以只能在全部任务结束后看到结果。要实现每个文件下载完成就立刻显示提示,需要利用WinSCP的FileTransferred事件,它会在单个文件传输完成时触发。

修改后的脚本如下:

Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"

$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Ftp
    HostName = "ip of ftp"
    PortNumber = port number
    UserName = "user"
    Password = "credentials"
}

$session = New-Object WinSCP.Session

try
{
    # 注册文件传输完成事件,单个文件下载完就触发
    $session.add_FileTransferred({
        param($sender, $e)
        # 检查传输是否成功
        if ($e.Error -eq $null)
        {
            Write-Host ("文件 {0} 下载完成" -f $e.FileName)
        }
        else
        {
            Write-Host ("文件 {0} 下载失败: {1}" -f $e.FileName, $e.Error.Message)
        }
    })

    $session.Open($sessionOptions)

    $transferOptions = New-Object WinSCP.TransferOptions
    $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
 
    $transferResult = $session.GetFiles($remotePath, $localPath, $False, $transferOptions)
 
    $transferResult.Check()
}
finally
{
    $session.Dispose()
}

关键修改说明:

  • 添加了$session.add_FileTransferred({ ... })事件注册,这个事件会在每个文件传输完成后立即触发,不管是成功还是失败。
  • 在事件处理逻辑里,通过$e.FileName获取当前完成的文件名,同时可以通过$e.Error判断传输是否成功,输出对应的提示。
  • 原脚本中遍历$transferResult.Transfers的代码可以移除,因为事件已经实时输出了每个文件的状态。

内容的提问来源于stack exchange,提问作者verosf98

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:25:07