目标:我正在尝试获取所有1天前或更新的文件。远程目录有很多目录以及根目录上的文件。
我需要查看每个目录,获取任何文件1天前,以及根目录上的任何文件1天前,并转移到一个单一的目录所有这些。我不想复制任何空目录,或任何文件超过1天的目录。
当前代码只是继续运行,不传输任何文件。我不确定是否正确设置了foreach
以及GetFiles
部分。GetFiles
部分需要说明什么才能满足上面列出的文件要求?
以下是它看起来是什么样子的一个例子:
代码:
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::ftp
HostName = "ftp site"
UserName = "UserName"
Password = "Password"
SshHostKeyFingerprint = "stuff"
}
$sessionOptions.AddRawSettings("FSProtocol", "2")
$session = New-Object WinSCP.Session
$session.SessionLogPath = $log
try {
# Connect
$session.Open($sessionOptions)
# Set up transfer options
$transferOptions = New-Object WinSCP.TransferOptions -Property @{
TransferMode = [WinSCP.TransferMode]::Ascii
}
$lcdPath = 'Filepath\'
$time = (Get-Date).AddDays(-1)
$files = @(Get-ChildItem -Path $lcdPath -Attributes !Directory -Recurse | Where-Object { $_.LastWriteTime -gt $time })
# Transfer files
foreach ($file in $files) {
$session.GetFiles($files, "LocalFilePath", $False, $transferOptions).Check()
}
}
finally {
$session.Dispose()
}
exit 0
catch
{
Write-Host "Error: $($_.Exception.Message)"
exit 1
}
2条答案
按热度按时间7vhp5slm1#
下面是WinSCP站点的示例,它实现了您想要实现的部分功能:
Downloading all files from FTP/SFTP to the same local folder。
您只需添加时间条件,即可查看:
Download files newer than X days from SFTP server with WinSCP, skipping folders that do not contain any matching files
将这些结合在一起,应该可以做到:
3pvhb19x2#
您有几个问题,您的代码将需要一些重新工作,但您的关闭。
您最大的问题是在本地文件系统的当前目录中查找
Filepath\
中的新文件,而不是在FTP服务器上:我认为您应该使用list the remote files on the FTP server,并使用该数据构建
$files
列表。(以下示例摘自winscp.net)您可以修改这段代码以基于
$fileinfo.LastWriteTime
的远程文件填充$files
数组,然后将其传递给您的“传输文件”Foreach循环。此外,您的try/Catch/Finally代码还存在一些语法问题,应该如下所示: