Script um Dateien zu verschieben und mail zu generieren
Hey zusammen,
ich bin neu hier Wollte wissen ob folgendes möglich ist und wenn ja bzw. an wen ich mich hier am besten wenden könnte
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.
ich bin neu hier Wollte wissen ob folgendes möglich ist und wenn ja bzw. an wen ich mich hier am besten wenden könnte
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.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1722773670
Url: https://administrator.de/contentid/1722773670
Ausgedruckt am: 22.11.2024 um 00:11 Uhr
3 Kommentare
Neuester Kommentar
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)
Bei Anfragen oder Fragen dazu bitte PN.
Viel Erfolg.
Grüße Uwe
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()
}
Viel Erfolg.
Grüße Uwe