Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 仅使用PowerShell中的WinSCP下载新文件_.net_Powershell_Sftp_Winscp_Winscp Net - Fatal编程技术网

.net 仅使用PowerShell中的WinSCP下载新文件

.net 仅使用PowerShell中的WinSCP下载新文件,.net,powershell,sftp,winscp,winscp-net,.net,Powershell,Sftp,Winscp,Winscp Net,我如何下载最新的文件,或者发布了一定时间的文件?导入包含源列和目标列的CSV文件。需要检查路径是否存在/文件是否存在,并且只下载新文件 脚本现在正在将所有文件移动到相应的文件夹中,但一旦我再次运行脚本,它就不会只下载新文件 以下是CSV文件的一个示例: try{ Add-Type -Path "WinSCPnet.dll" # Setup session options $sessionOptions = New-Object WinSCP.SessionOptions -Prop

我如何下载最新的文件,或者发布了一定时间的文件?导入包含源列和目标列的CSV文件。需要检查路径是否存在/文件是否存在,并且只下载新文件

脚本现在正在将所有文件移动到相应的文件夹中,但一旦我再次运行脚本,它就不会只下载新文件

以下是CSV文件的一个示例:

try{

  Add-Type -Path "WinSCPnet.dll"
  # Setup session options
  $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::sftp
    HostName = "xxxxx"
    UserName = "xxxxr"
    Password = "xxxxxxx"
    PortNumber = "xx"
    GiveUpSecurityAndAcceptAnySshHostKey = $true
  }

  $session = New-Object WinSCP.Session

  try{
    # Connect
    $session.Open($sessionOptions)
    # Download files
    $transferOptions = New-Object WinSCP.TransferOptions
    $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary

    Import-Csv -Path "C:\movefiles.csv" -ErrorAction Stop | foreach{

      Write-Host $_.Source
      Write-host $_.Destination 

      $transferResult =
        $session.GetFiles($_.Source, $_.Destination, $False, $transferOptions)

      # Throw on any error
      $transferResult.Check()

      # Print results
      $smtpBody = ""
      foreach ($transfer in $transferResult.Transfers){

        Write-Host "Download of $($transfer.FileName) succeeded"

        $smtpbody += " Files : ( $transfer.filename - join ', ')" +
                     " Current location: $($_.Destination) "
      } 

      Send-Mail Message @smtpMessage  -Body $smtpbody
    }
    finally {
      # Disconnect, clean up
      $session.Dispose()
    }
  }
  catch
  {
    Write-Host "Error: $($_.Exception.Message)"
  }
}
CSV文件的示例:

try{

  Add-Type -Path "WinSCPnet.dll"
  # Setup session options
  $sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::sftp
    HostName = "xxxxx"
    UserName = "xxxxr"
    Password = "xxxxxxx"
    PortNumber = "xx"
    GiveUpSecurityAndAcceptAnySshHostKey = $true
  }

  $session = New-Object WinSCP.Session

  try{
    # Connect
    $session.Open($sessionOptions)
    # Download files
    $transferOptions = New-Object WinSCP.TransferOptions
    $transferOptions.TransferMode = [WinSCP.TransferMode]::Binary

    Import-Csv -Path "C:\movefiles.csv" -ErrorAction Stop | foreach{

      Write-Host $_.Source
      Write-host $_.Destination 

      $transferResult =
        $session.GetFiles($_.Source, $_.Destination, $False, $transferOptions)

      # Throw on any error
      $transferResult.Check()

      # Print results
      $smtpBody = ""
      foreach ($transfer in $transferResult.Transfers){

        Write-Host "Download of $($transfer.FileName) succeeded"

        $smtpbody += " Files : ( $transfer.filename - join ', ')" +
                     " Current location: $($_.Destination) "
      } 

      Send-Mail Message @smtpMessage  -Body $smtpbody
    }
    finally {
      # Disconnect, clean up
      $session.Dispose()
    }
  }
  catch
  {
    Write-Host "Error: $($_.Exception.Message)"
  }
}
源、目标
/client1/Business/2019,C:\test\test1
/client2/Reporting/2018,C:\test\test2

如果您的
目标
是普通目录路径,您只需将
会话.GetFiles
替换为:



另请参见WinSCP常见问题解答

您也可以使用@RichMoss Yes检查远程文件修改日期,而无需下载所有文件。但是,
Session.synchronizeDirectory
在内部就是这样做的。它也可以为您下载。因此,这是一种更容易使用
会话.同步目录的方法,除非您需要以无法使用的方式自定义该过程。