首页 > 解决方案 > 仅当文件不存在时才使用 PowerShell 从 SFTP 服务器传输文件

问题描述

需要指导将文件从 SFTP 服务器传输到网络共享文件夹,但前提是文件名不存在。

我现在可以做到这一点,但是一直在努力解决同名文件被覆盖在传输到的文件夹上的问题,并且更愿意跳过同名文件。

尝试获取 powershell 脚本以检查文件是否存在,如果存在则跳过并且不要传输。以下是我目前拥有并尝试过但似乎不起作用的内容,它用相同的名称覆盖了我现有的文件,这不是我想要的。我也会继续做进一步的研究。

# Load the Assemblemy and setup the session properties
try
{
   # Load WinSCP . NET assembly
   Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"

   # setup session options
   $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
      Protocol = [WinSCP.Protocol]::Sftp
      HostName = "0.0.0.0"
      UserName = "usernam01"
      Password = "Password"
      SshHostKeyFingerprint = "ssh-ed25519 256 **************************************"
  }


$session = New-Object WinSCP.Session
#end

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

        # Download files
        $transferOptions = New-Object WinSCP.TransferOptions
        $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary
        #$transferOptions.FileMask = "*>=1D"

        $transferResult =
            $session.GetFiles("/home/*.csv", "\\fww\folder\", $False, $transferOptions)
        $remotePath = "\\fww\folder\"
        if ($session.FileExists($remotePath))
        {
             Write-Host "File $remotePath exists"
        }

        # Throw on any error
        $transferResult.Check()

        # Print results
        foreach ($transfer in $transferResult.Transfers)
        {
            Write-Host "Transfer of $($transfer.FileName) succeeded"
        }
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }

    exit 0
}
catch [Exception]
{
    Write-Host "Error: $($_.Exception.Message)"
    exit 1

标签: .netpowershellpowershell-2.0sftpwinscp

解决方案


本地同步

我认为本地同步可能对您有用,我假设您担心文件在远程端被存档/移动导致本地副本丢失这些文件。如果bool removeFilesSession.SynchronizeDirectories方法调用设置为$False,则不应删除远程源中不存在的过时文件。

如果本地同步对您不起作用

如果本地同步在您的情况下不可接受,您可以使用Session.ListDirectory列出您感兴趣的所有文件,如果本地文件不存在,则一次传输一个。

您也可以仔细阅读 WinSCP .NET 文档的这一页,了解有关仅传输较新/修改过的文件的其他技术。


推荐阅读