![我可以从 WinSCP 脚本获取吞吐速度吗?](https://linux22.com/image/1443604/%E6%88%91%E5%8F%AF%E4%BB%A5%E4%BB%8E%20WinSCP%20%E8%84%9A%E6%9C%AC%E8%8E%B7%E5%8F%96%E5%90%9E%E5%90%90%E9%80%9F%E5%BA%A6%E5%90%97%EF%BC%9F.png)
我看到当我运行脚本时,它会在下载时输出吞吐量,有没有办法在文件下载后获取其总吞吐速度?
我的脚本:
WinSCP.exe /console /script=script.txt /log=my_log.log > output
脚本.txt
option batch abort
option confirm off
open IMC
get "/home/ftp/download/01_MBytes.txt" "C:\downloads\01_MBytes.txt"
exit
答案1
你可以自己计算一下。
我建议你将您的脚本转换为使用 WinSCP .NET 程序集的 PowerShell 脚本。
然后,您可以在调用之前和之后花点时间Session.GetFiles
并计算速度:
$remotePath = "/home/ftp/download/01_MBytes.txt"
$localPath = "C:\downloads\01_MBytes.txt"
Write-Host "Starting download"
$start = Get-Date
$session.GetFiles($remotePath, $localPath).Check()
$duration = (Get-Date) - $start
$size = (Get-Item $localPath).Length / 1024
$speed = $size / $duration.TotalSeconds
Write-Host "Downloaded file $remotePath to $localPath"
Write-Host ("Size {0:N0} KB, Time {1:hh\:mm\:ss}" -f $size, $duration)
Write-Host ("Speed {0:N0} KB/s" -f $speed)
完整脚本如下。它基于WinSCP.NET 程序集的官方 PowerShell 示例。
try
{
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
$sessionOptions.HostName = "example.com"
$sessionOptions.UserName = "user"
$sessionOptions.Password = "mypassword"
$sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
$remotePath = "/home/ftp/download/01_MBytes.txt"
$localPath = "C:\downloads\01_MBytes.txt"
Write-Host "Starting download"
$start = Get-Date
$session.GetFiles($remotePath, $localPath).Check()
$duration = (Get-Date) - $start
$size = (Get-Item $localPath).Length / 1024
$speed = $size / $duration.TotalSeconds
Write-Host "Downloaded file $remotePath to $localPath"
Write-Host ("Size {0:N0} KB, Time {1:hh\:mm\:ss}" -f $size, $duration)
Write-Host ("Speed {0:N0} KB/s" -f $speed)
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch [Exception]
{
Write-Host $_.Exception
exit 1
}