WINSCP, Anzahl der Dateien zählen
Hallo allerseits,
Ich nutze WINSCP in der Console (mit Batchaufruf und script)
Ich habe ein Script erstellt, mit dem ich jeden Tag mit dem "put" Befehl Dateien aus unterschiedlichen Quell-Ordnern auf einem SFTP Server hochlade.
Klappt auch soweit alles.
Es sind jeden Tag von 10 Ordner(gefüllt mit DOC Files) immer ein paar unterschiedliche Ordner ohne DOC Dateien vorhanden.
Nun zur eigentlichen Problemstellung:
Ich muss prüfen, ob immer alle Dateien hochgeladen worden sind.
Wie kann ich die Anzahl der erfolgreich hoch geladenen Dateien zählen?
Welche Anzahl richtig sein soll, kann ich ja mit dem Explorer über die Eigenschaften gegen prüfen...
In der Logdatei von WINSCP ist immer Exit Code 0 (also Fehler), da ja einige Ordner keine DOC Dateien enthalten.
In der Doku zu WINSCP habe ich nichts gefunden...
Kann jemand mir einen Denkanstoß geben?
Vielen Dank vorab!
Gruß
Werner
Ich nutze WINSCP in der Console (mit Batchaufruf und script)
Ich habe ein Script erstellt, mit dem ich jeden Tag mit dem "put" Befehl Dateien aus unterschiedlichen Quell-Ordnern auf einem SFTP Server hochlade.
Klappt auch soweit alles.
Es sind jeden Tag von 10 Ordner(gefüllt mit DOC Files) immer ein paar unterschiedliche Ordner ohne DOC Dateien vorhanden.
Nun zur eigentlichen Problemstellung:
Ich muss prüfen, ob immer alle Dateien hochgeladen worden sind.
Wie kann ich die Anzahl der erfolgreich hoch geladenen Dateien zählen?
Welche Anzahl richtig sein soll, kann ich ja mit dem Explorer über die Eigenschaften gegen prüfen...
In der Logdatei von WINSCP ist immer Exit Code 0 (also Fehler), da ja einige Ordner keine DOC Dateien enthalten.
In der Doku zu WINSCP habe ich nichts gefunden...
Kann jemand mir einen Denkanstoß geben?
Vielen Dank vorab!
Gruß
Werner
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 595237
Url: https://administrator.de/contentid/595237
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
9 Kommentare
Neuester Kommentar
In der Logdatei von WINSCP ist immer Exit Code 0 (also Fehler), da ja einige Ordner keine DOC Dateien enthalten.
Wie kommst du darauf, dass Exit Code 0 = Fehler ist?https://winscp.net/eng/docs/faq_script_result
Ich nutze WINSCP in der Console (mit Batchaufruf und script)
Ich habe ein Script erstellt, mit dem ich jeden Tag mit dem "put" Befehl Dateien aus unterschiedlichen Quell-Ordnern auf einem SFTP Server hochlade.
Klappt auch soweit alles.
Es sind jeden Tag von 10 Ordner(gefüllt mit DOC Files) immer ein paar unterschiedliche Ordner ohne DOC Dateien vorhanden.
Nun zur eigentlichen Problemstellung:
Ich muss prüfen, ob immer alle Dateien hochgeladen worden sind.
Wie kann ich die Anzahl der erfolgreich hoch geladenen Dateien zählen?
Ich habe ein Script erstellt, mit dem ich jeden Tag mit dem "put" Befehl Dateien aus unterschiedlichen Quell-Ordnern auf einem SFTP Server hochlade.
Klappt auch soweit alles.
Es sind jeden Tag von 10 Ordner(gefüllt mit DOC Files) immer ein paar unterschiedliche Ordner ohne DOC Dateien vorhanden.
Nun zur eigentlichen Problemstellung:
Ich muss prüfen, ob immer alle Dateien hochgeladen worden sind.
Wie kann ich die Anzahl der erfolgreich hoch geladenen Dateien zählen?
An diese Informationen kommt man meiner Meinung nach nur vernünftig, indem man das .NET Assembly von WinSCP z. B. per PS nutzt.
Welche Anzahl richtig sein soll, kann ich ja mit dem Explorer über die Eigenschaften gegen prüfen...
In der Logdatei von WINSCP ist immer Exit Code 0 (also Fehler), da ja einige Ordner keine DOC Dateien enthalten.
In der Logdatei von WINSCP ist immer Exit Code 0 (also Fehler), da ja einige Ordner keine DOC Dateien enthalten.
Das heißt ja, alles in Ordnung.
In der Doku zu WINSCP habe ich nichts gefunden...
Das steht dort eigentlich ganz gut beschrieben drin.
Ich würde schauen ob ich das über rsync abarbeiten kann. Hintergrund ist das dein reines "Dateizählen" nichts bringt. Was machst du wenn die Datei beim Kopieren beschädigt wurde? Dann hast du aufm Ziel ne 0-Byte-Datei aber natürlich würde dir dein Programm sagen "klar, hab ich ja kopiert".
Bei Rsync + Co hast du dagegen die Sicherheit das die Datei korrekt ankommt wenn du z.B. die MD5-Summen der Datei prüfst. Wenn der mitten drin abgebrochen is - resume und gut...
Wenn es schon Winscp sein muss würde ich etwas script-arbeit reinstecken und mir eben eine Text-File erzeugen was die Dateinamen + MD5-Summen enthält und auf dem Server dann dasselbe -> der muss halt prüfen ob die Dateien nach dem Kopieren alle da sind und passen, sonst halt irgendeine Aktion ausführen lassen (Mail an Admin, Selbstzerstörung des Servers, alles andere auch löschen - ganz wie du magst...)
Bei Rsync + Co hast du dagegen die Sicherheit das die Datei korrekt ankommt wenn du z.B. die MD5-Summen der Datei prüfst. Wenn der mitten drin abgebrochen is - resume und gut...
Wenn es schon Winscp sein muss würde ich etwas script-arbeit reinstecken und mir eben eine Text-File erzeugen was die Dateinamen + MD5-Summen enthält und auf dem Server dann dasselbe -> der muss halt prüfen ob die Dateien nach dem Kopieren alle da sind und passen, sonst halt irgendeine Aktion ausführen lassen (Mail an Admin, Selbstzerstörung des Servers, alles andere auch löschen - ganz wie du magst...)
Jepp, checksum mukt dik dat
https://winscp.net/eng/docs/library_example_verify_file_checksum
Und hier noch mehr zum Thema
https://winscp.net/eng/docs/library_powershell
Also alles kein Hexenwerk.
https://winscp.net/eng/docs/library_example_verify_file_checksum
Und hier noch mehr zum Thema
https://winscp.net/eng/docs/library_powershell
Also alles kein Hexenwerk.
Einfaches Beispiel mit dem .NET Assembly in Powershell
(das GiveUpSecurityAndAcceptAnySshHostKey = $true ist nur für einen Test, ansonsten gehört das der Sicherheit ersetzt durch den tatsächlichen SHA256 FIngerprint des Zertifikats SshHostKeyFingerprint = 'xxxxxxxxxxxxxxxxxxxx')
(das GiveUpSecurityAndAcceptAnySshHostKey = $true ist nur für einen Test, ansonsten gehört das der Sicherheit ersetzt durch den tatsächlichen SHA256 FIngerprint des Zertifikats SshHostKeyFingerprint = 'xxxxxxxxxxxxxxxxxxxx')
Add-Type -Path ".\WinSCPnet.dll"
$options = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Sftp
Hostname = 'sftp.domain.tld'
Username = 'USERNAME'
Password = 'PASSWORD'
GiveUpSecurityAndAcceptAnySshHostKey = $true
}
# create session object
$session = New-Object WinSCP.Session
try{
# open session
$session.Open($options)
# define transport options
$transoptions = New-Object WinSCP.TransferOptions -Property @{Transfermode = [WinSCP.TransferMode]::Binary}
# synchronize local to remote
$result = $session.SynchronizeDirectories('Remote','D:\whereever','/remote/path',$false,$false,'Either')
# throw exceptions when there where errors
$result.Check()
$result
}catch{
write-error -Message $_.Exception.Message
}finally{
# cleanup
$session.Close()
$session.Dispose()
}