Ich habe hier ein Skript, das Dateien per SFTP von einem Ort zum anderen überträgt. Das Skript funktioniert einwandfrei, ich möchte es jedoch so ändern, dass es nur Dateien kopiert, die noch nicht vorhanden sind. Ich bin ein ziemlicher Neuling in Sachen Powershell, daher wäre ich für jede Hilfe sehr dankbar.
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
}
Vielen Dank.
Antwort1
Das Skript, das Sie aus dem WinSCP-Beispiel für dieSession.GetFiles
wurde nur für eine einzelne Datei entwickelt. Sie haben versucht, es so zu manipulieren, dass stattdessen Verzeichnisse synchronisiert werden. Das kann nicht funktionieren.
Um Verzeichnisse zu synchronisieren, verwenden Sie dieSession.SynchronizeDirectories
:
# Synchronize files
$synchronizationResult = $session.SynchronizeDirectories(
[WinSCP.SynchronizationMode]::Local, $localPath $remotePath)
# Throw on any error
$synchronizationResult.Check()