如何显示从PowerShell下载到WinSCP .NET程序集中的文件

sbtkgmzw  于 2023-03-30  发布在  Shell
关注(0)|答案(1)|浏览(124)

我有一个脚本,从FTP服务器下载一些录音,下载保存在我的计算机上的本地路径内的文件夹中。
我可以在所有录制成功下载后触发一条消息,但我希望每次下载每个FTP录制时都显示一条消息。如何才能做到这一点?
这是一个脚本:

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.Open($sessionOptions)

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

    foreach ($transfer in $transferResult.Transfers)
    {
        Write-Host ("Download of {0} succeeded" -f $transfer.FileName)
    }
}
finally
{
    $session.Dispose()
}

我一直在寻找方法,但我找不到答案。

gab6jxml

gab6jxml1#

如果你只想在文件完成传输时显示文件名,可以使用Session.FileTransferred event

function FileTransferred
{
    param($e)
 
    if ($e.Error -eq $Null)
    {
        Write-Host "Download of $($e.FileName) succeeded"
    }
    else
    {
        Write-Host "Download of $($e.FileName) failed: $($e.Error)"
    }
}

$session.add_FileTransferred( { FileTransferred($_) } )

$session.Open($sessionOptions)

...

$session.GetFiles($remotePath, $localPath, $False, $transferOptions).Check()

如果您想显示单个文件传输的进度,可以使用Session.FileTransferProgress

相关问题