Tengo una secuencia de comandos aquí que transfiere los archivos SFTP de una ubicación a otra. La secuencia de comandos funciona bien, sin embargo, me gustaría cambiarla para que solo copie los archivos que aún no están presentes. Un poco novato con PowerShell, por lo que cualquier ayuda sería muy apreciada.
cd "c:\Program Files (x86)\WinSCP\" # location of .NET assembly ddl file
try
{
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
$sessionOptions.HostName = "192.168.xxx.xxx"
$sessionOptions.UserName = "xxxx"
$sessionOptions.Password = "xxxx"
$sessionOptions.SshHostKeyFingerprint = "ssh-rsa 2048 xx:xx:xx"
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
$stamp = Get-Date -f "yyyyMMdd"
$fileName = "export_$stamp.txt"
$remotePath = "/home/user/john/reports"
$localPath = "\\fileserver\reports\"
if ($session.FileExists($remotePath))
{
if (!(Test-Path $localPath))
{
Write-Host (
"File {0} exists, local backup {1} does not" -f
$remotePath, $localPath)
$download = $True
}
if ($download)
{
# Download the file and throw on any error
$session.GetFiles($remotePath, $localPath).Check()
Write-Host "Download to backup done."
}
}
else
{
Write-Host ("File {0} does not exist yet" -f $remotePath)
}
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
exit 0
}
catch [Exception]
{
Write-Host $_.Exception.Message
exit 1
}
Muchas gracias.
Respuesta1
El script que tomó del ejemplo de WinSCP para elSession.GetFiles
fue diseñado para un solo archivo. En su lugar, ha intentado doblarlo para sincronizar directorios. Eso no puede funcionar.
Para sincronizar directorios, utilice elSession.SynchronizeDirectories
:
# Synchronize files
$synchronizationResult = $session.SynchronizeDirectories(
[WinSCP.SynchronizationMode]::Local, $localPath $remotePath)
# Throw on any error
$synchronizationResult.Check()