powershell 自上次运行以来创建的文件的SFTP上载

zc0qhyus  于 2023-03-08  发布在  Shell
关注(0)|答案(1)|浏览(163)

我对PowerShell非常陌生,正在编写一个脚本,通过WinSCP执行SFTP文件传输。然后,我将在Windows任务计划程序上创建一个任务,以便无限期地每15分钟运行一次此脚本。目前,我有以下代码行,它可以在20秒之前的最后一次写入时间内获取目录中的所有文件:

$filelist = Get-ChildItem C:\Users\lsarm\IHS\test |
    where { $_.LastWriteTime -lt (Get-Date).AddSeconds(-20) }

有人告诉我,这需要更改,以便它获得自上次运行任务(15分钟前)以来的所有文件,但我在找到答案方面运气很差。
我试过使用Get-ScheduledTask,但似乎只能得到任务的基本信息,似乎不是我脚本所需要的。另外,我已经下载了WinSCP .dll文件,并在PowerShell中解除了阻止。TIA,欢迎提供任何帮助。

sauutmhj

sauutmhj1#

使用上次运行任务的时间是不可靠的。仍然有空间让你错过一些文件或重复传输一些文件。
相反,请考虑记住最近上载文件的时间戳。
假设您使用Session.PutFiles,则可以使用如下代码:

$transferResult =
  $session.PutFiles($sourcePath, $destPath, $False, $transferOptions)
$transferResult.Check()
 
# Find the latest uploaded file
$latestTransfer =
  $transferResult.Transfers |
  Sort-Object -Property @{ Expression = { (Get-Item $_.Source).LastWriteTime } } `
              -Descending |
  Select-Object -First 1

并将$latestTransfer保存到一个文件中以备下次运行,或者延迟15分钟循环代码,而不是每15分钟调度一次。
另一种选择是记住已经传输的文件。
这两个选项的详细信息见:How do I transfer new/modified files only?

相关问题