Automatischer ftp-Download
Hallo zusammen,
ich möchte gerne Dateien von einem ftp-Server automatisiert herunterladen.
Dabei sollen alle Dateien der letzten 2 Wochen heruntergeladen werden, sollten die Dateien schon da sein, sollen sie nicht überschrieben werden.
Hat da jemand eine Idee, wie man sowas bewerkstelligen könnte?
Vielen Dank
ich möchte gerne Dateien von einem ftp-Server automatisiert herunterladen.
Dabei sollen alle Dateien der letzten 2 Wochen heruntergeladen werden, sollten die Dateien schon da sein, sollen sie nicht überschrieben werden.
Hat da jemand eine Idee, wie man sowas bewerkstelligen könnte?
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 668218
Url: https://administrator.de/contentid/668218
Ausgedruckt am: 21.11.2024 um 17:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
ungetestet:
Zu speichern als *.ps1 - es handelt sich hier um ein Powershellscript.
Gruß
ungetestet:
# FTP-Server Konfigurationsdaten
$ftpServer = "ftp://ftp.example.com"
$ftpUsername = "username"
$ftpPassword = "password"
$ftpDir = "/path/on/ftp"
$localDir = "C:\path\to\local\directory"
# Datum für die letzten 14 Tage
$twoWeeksAgo = (Get-Date).AddDays(-14)
# Funktion zum Herunterladen einer Datei von FTP
function Download-FTPFile {
param (
[string]$ftpUrl,
[string]$localPath,
[string]$ftpUser,
[string]$ftpPass
)
$webClient = New-Object System.Net.WebClient
$webClient.Credentials = New-Object System.Net.NetworkCredential($ftpUser, $ftpPass)
# Datei nur herunterladen, wenn sie nicht lokal existiert
if (-not (Test-Path -Path $localPath)) {
try {
$webClient.DownloadFile($ftpUrl, $localPath)
Write-Host "Heruntergeladen: $localPath"
} catch {
Write-Host "Fehler beim Herunterladen der Datei: $ftpUrl"
}
} else {
Write-Host "Datei existiert bereits: $localPath"
}
}
# Funktion zum Prüfen des Änderungsdatums einer Datei auf dem FTP-Server
function Get-FTPFileModifiedTime {
param (
[string]$ftpUrl,
[string]$ftpUser,
[string]$ftpPass
)
$request = [System.Net.FtpWebRequest]::Create($ftpUrl)
$request.Method = [System.Net.WebRequestMethods+Ftp]::GetDateTimestamp
$request.Credentials = New-Object System.Net.NetworkCredential($ftpUser, $ftpPass)
try {
$response = $request.GetResponse()
$lastModified = $response.LastModified
$response.Close()
return $lastModified
} catch {
Write-Host "Fehler beim Abrufen des Änderungsdatums: $ftpUrl"
return $null
}
}
# Liste der Dateien auf dem FTP-Server abrufen
function Get-FTPFileList {
param (
[string]$ftpUrl,
[string]$ftpUser,
[string]$ftpPass
)
$request = [System.Net.FtpWebRequest]::Create($ftpUrl)
$request.Method = [System.Net.WebRequestMethods+Ftp]::ListDirectoryDetails
$request.Credentials = New-Object System.Net.NetworkCredential($ftpUser, $ftpPass)
try {
$response = $request.GetResponse()
$reader = New-Object IO.StreamReader $response.GetResponseStream()
$fileList = $reader.ReadToEnd()
$reader.Close()
$response.Close()
return $fileList
} catch {
Write-Host "Fehler beim Abrufen der Datei-Liste: $ftpUrl"
return $null
}
}
# Hauptlogik
$ftpUrl = "$ftpServer$ftpDir"
$fileList = Get-FTPFileList -ftpUrl $ftpUrl -ftpUser $ftpUsername -ftpPass $ftpPassword
if ($fileList) {
$fileList -split "`n" | ForEach-Object {
# Dateiname aus der Liste extrahieren (ggf. muss das je nach FTP-Server angepasst werden)
$fileName = ($_ -split "\s+")[-1]
$ftpFileUrl = "$ftpUrl/$fileName"
$localFilePath = Join-Path $localDir $fileName
# Änderungsdatum der Datei abrufen
$lastModified = Get-FTPFileModifiedTime -ftpUrl $ftpFileUrl -ftpUser $ftpUsername -ftpPass $ftpPassword
if ($lastModified -and $lastModified -ge $twoWeeksAgo) {
# Datei herunterladen, wenn sie in den letzten zwei Wochen geändert wurde
Download-FTPFile -ftpUrl $ftpFileUrl -localPath $localFilePath -ftpUser $ftpUsername -ftpPass $ftpPassword
} else {
Write-Host "Datei $fileName ist älter als zwei Wochen."
}
}
}
Zu speichern als *.ps1 - es handelt sich hier um ein Powershellscript.
Gruß
Zitat von @Peterz:
Hat da jemand eine Idee, wie man sowas bewerkstelligen könnte?
Z. B. mit den Automatisierungsmöglichkeiten von WinSCP.
Gut ist auch "PyroBatch" (https://www.heise.de/download/product/pyrobatchftp-10944)
Kann ich nur wärmstens empfehlen.
Mfg
SH
Kann ich nur wärmstens empfehlen.
Mfg
SH
Zieh dir mal das nei:
Watch FTP
Das ist ein echt tolles Tool, für Business kostet das nicht mal viel (was bei 100 takken).
Kann Folder überwachen und dann nach Wunsch Aktionen ausführen (kopieren, Mail schicken, löschen, verschieben, naja halt den ganzen kram den man sonst per Hand macht). Achtung: es bietet sich an die "Aufgaben" in Watch FTP als Dienst zu aktivieren, dann muss das Tool nimma laufen.
Watch FTP
Das ist ein echt tolles Tool, für Business kostet das nicht mal viel (was bei 100 takken).
Kann Folder überwachen und dann nach Wunsch Aktionen ausführen (kopieren, Mail schicken, löschen, verschieben, naja halt den ganzen kram den man sonst per Hand macht). Achtung: es bietet sich an die "Aufgaben" in Watch FTP als Dienst zu aktivieren, dann muss das Tool nimma laufen.
Guck dir FreeFileSync an.
Damit synchronisiere ich automatisiert, täglich ne NAS mit einem Fileserver. Kann viele Protokolle.
Kostet nix, lebt aber von freiwilligen Spenden.
Damit synchronisiere ich automatisiert, täglich ne NAS mit einem Fileserver. Kann viele Protokolle.
Kostet nix, lebt aber von freiwilligen Spenden.
Oder WinSCP Einzeiler
winscp /command "option batch on" "option confirm off" "open ftp://domain.com -username=XXXXXX -password=XXXXXXXXXXXX" "synchronize local -transfer=binary D:\local\folder /remote/path " close exit