使用WinSCP和PowerShell上载文件之间的暂停

问题描述 投票:1回答:1

我有下面的PowerShell脚本,对此我将非常感谢。

脚本从网络驱动器中获取文件名以COKA_*"开头的文件,然后将其上传到SFTP站点。

问题:目标站点不喜欢批量接收所有文件,而是一次接收一个。每次文件传输之间有60秒的延迟。

在哪里可以在脚本或迭代中添加此延迟,以一次仅延迟60秒推送一个文件?我非常感谢您的帮助。

param (

    $localPath = "U:\####\COKA_*", # Source, one or more files generated at on a request
    $remotePath = "/from_/feast/Outbound/", #Destination file location
    $backupPath = "U:\####\Archive", # archive file destination
)

try
{
    # Load WinSCP .NET assembly
    Add-Type -Path "E:\######\WinSCP\WinSCPnet.dll"

    # Set up session options
    $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
        Protocol = [WinSCP.Protocol]::Sftp
        HostName = "123.456.78.901"
        UserName = "iamencrypted"
        SshHostKeyFingerprint = "ssh-rsa 2048 DYPA3BjRCbKLosI5W9iamdefinatlydencrypted"
        SshPrivateKeyPath = "\\#####\###\###\##\FTP\######\#####\########.ppk"
    }

    $sessionOptions.AddRawSettings("AgentFwd", "1")

    $session = New-Object WinSCP.Session

    try
    {
        # Connect
        $session.Open($sessionOptions)

        # Upload files, collect results
        $transferResult = $session.PutFiles($localPath, $remotePath)

        # Iterate over every transfer
        foreach ($transfer in $transferResult.Transfers)
        {

            # Success or error?
            if ($transfer.Error -eq $Null)
            {
                Write-Host "Upload of $($transfer.FileName) succeeded, moving to Archive"
                # Upload succeeded, move source file to Archive
                Move-Item -force $transfer.FileName $backupPath
            }
            else
            {
                Write-Host "Upload of $($transfer.FileName) failed: $($transfer.Error.Message)"
            }
        }
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

    exit 0
}
catch [Exception]
{
    Write-Host "Error: $($_.Exception.Message)"
    exit 1
}
.net powershell sftp winscp winscp-net
1个回答
0
投票

然后您不能将Session.PutFiles与文件掩码一起使用。

您必须找到要上载的文件,然后分别为每个文件调用Session.PutFiles,并在(Session.PutFiles)之间有一个停顿。

为此使用Start-Sleep

Start-Sleep
© www.soinside.com 2019 - 2024. All rights reserved.