.net - 仅当文件不存在时才使用 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
解决方案
本地同步
我认为本地同步可能对您有用,我假设您担心文件在远程端被存档/移动导致本地副本丢失这些文件。如果bool removeFiles
将Session.SynchronizeDirectories
方法调用设置为$False
,则不应删除远程源中不存在的过时文件。
如果本地同步对您不起作用
如果本地同步在您的情况下不可接受,您可以使用Session.ListDirectory
列出您感兴趣的所有文件,如果本地文件不存在,则一次传输一个。
您也可以仔细阅读 WinSCP .NET 文档的这一页,了解有关仅传输较新/修改过的文件的其他技术。
推荐阅读
- objective-c - WKWebView loadFileURL 抛出 WebPageProxy::Ignoring 加载此主资源的请求,因为它在沙箱之外
- php - 表单未发布所有值
- reactjs - 无限装载机
- java - 出现错误考虑在你的配置中定义一个“org.springframework.jdbc.core.JdbcTemplate”类型的bean
- javascript - 在没有 authguard 的情况下禁用 Angular 7 中的 url 更改导航或直接页面访问?
- amazon-web-services - AWS IoT DynamoDB 规则无法读取从 topic() 函数中选择的值
- javascript - 使用 formik 时在标签中显示活动状态
- spring-data - Spring Data Aerospike 中的增量操作
- reactjs - 将链接作为道具传递给 Gatsby Link 时出错
- vb.net - 如何在 Visual Studio 中更改 ProgressBar 颜色?