tanjakl
Goto Top

Script um Dateien zu verschieben und mail zu generieren

Hey zusammen,
ich bin neu hier face-smile Wollte wissen ob folgendes möglich ist und wenn ja bzw. an wen ich mich hier am besten wenden könnte face-smile
1) auf Sftp Server im bestimmten ORdner horchen ob was angekommen ist
2) wenn ja, dann a) email schreiben und b) Dateien von sftp server auf ein Verzeichnis meiner Wahl verschieben

Ist das möglich? Und wenn ja wie bzw. was kann ich machen bzw. an wen wende ich mich da am besten?
p.s. ich habe noch nie auf Windows oder so gescriptet.
Ich habe zwar IT Background (Wirtschaftsinformatik) gehöre aber leider nicht wirklich zu den Programmierern ;(

Danke für jeglichen Tipp und Unterstützung.

Content-Key: 1722773670

Url: https://administrator.de/contentid/1722773670

Printed on: February 22, 2024 at 03:02 o'clock

Member: MrCount
MrCount Jan 14, 2022 at 13:31:17 (UTC)
Goto Top
Servus,

schau mal hier: Skript zum Überwachen einer Datei
Mitglied: 148523
148523 Jan 14, 2022 at 13:40:49 (UTC)
Goto Top
Member: colinardo
Solution colinardo Jan 15, 2022 updated at 18:01:49 (UTC)
Goto Top
Servus @TanjaKl , willkommen auf Administrator.de!
hier mal ein Gerüst für dein Vorhaben mittels Powershell und WinSCP das du im Taskplaner regelmäßig ausführen lassen kannst.
(Die Zeile zum Versenden einer Mail (Zeile 52) ist noch auskommentiert, deren Daten wie Absender- Empfänger, Server etc. musst du erst noch ergänzen.) Für eine Erweiterte Funktion zum Verschicken von E-Mail-Nachrichten per Mailkit-Bibliothek siehe: Powershell: S-MIME verschlüsselte und signierte E-Mail inkl. sicherem Anhang verschicken (Mailkit-Bibliothek)
# remote directory for files
$REMOTE_DIR = '/source/path'  
# local directory for files
$LOCAL_DIR = 'D:\Data'  
# SSH Hostname
$SSH_HOST = 'myserver.domain.tld'  
# SSH Port
$SSH_PORT = 22
# SSH Username
$USERNAME = 'USERNAME'  
# SSH Password
$PASSWORD = 'PASSWORD'  
# ----------------------------------------
# install WinSCP module if needed
$modulename = 'WinSCP'  
if(!(Get-Module -ListAvailable -Name $modulename)){
    write-host "Module '$modulename' not found, trying to install module ... " -F Yellow -NoNewline  
    start powershell -Verb runas -ArgumentList "-EP Bypass -NoP -C Install-Module WinSCP -Force" -wait  
    if(!(Get-Module -ListAvailable -Name $modulename)){
        write-host "install failed, please try to install manualy. Exit." -F Red  
        sleep 2
        exit
    }else{
        write-host "Successfully installed." -F Green  
    }
}

# connection options
$params = @{
    Hostname = $SSH_HOST
    Credential = new-Object PSCredential($USERNAME,(ConvertTo-SecureString $PASSWORD -AsPlainText -Force))
    Protocol = 'Sftp'  
    PortNumber = $SSH_PORT
    GiveUpSecurityAndAcceptAnySshHostKey = $true
}

$session = $null
try{
    # create session
    $session = New-WinSCPSession -SessionOption (New-WinSCPSessionOption @params)
    # check for remote files
    $files = $session.EnumerateRemoteFiles($REMOTE_DIR,$null,[WinSCP.EnumerationOptions]::None)
    # if there are files
    if ($files.Name.Count){
        write-host "$($files.Name.Count) new file(s) available, starting transfer ..." -F Green -NoN  
        # define transport options
        $transoptions = New-WinSCPTransferOption -TransferMode Binary
        $transfer = $session.GetFilesToDirectory($REMOTE_DIR,$LOCAL_DIR,$null,$true,$transoptions)
        $mailbody = @"  
TransferResult:`t $(@{$true="OK";$false="ERROR"}[$transfer.IsSuccess])  
$(if(!$transfer.IsSuccess){"Errors:`t" + $transfer.Failures })  
Transfers:
$($transfer.Transfers | fl FileName,Destination | out-string)
"@  
        #Send-MailMessage -To 'receiver@domain.tld' -from 'sender@domain.tld' -Subject "Transferlog" -Body $mailbody -SmtpServer "smtp.mailserver.tld" -Port 587 -UseSsl -Credential (new-Object PSCredential('MYUSERNAME',(ConvertTo-SecureString 'MYPASSWORD' -AsPlainText -Force)))  
        write-host "Done." -F Green  
    }else{
        write-host "No files available in remote directory: '$REMOTE_DIR'."  
    }
    
}catch{
    write-error -Message $_.Exception.Message
}finally{
    # cleanup
    $session.Close()
    $session.Dispose()
}
Bei Anfragen oder Fragen dazu bitte PN.

Viel Erfolg.
Grüße Uwe