Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst PowerShell Sendmailmessage attachement Problem

Mitglied: Balgor

Balgor (Level 1) - Jetzt verbinden

09.08.2018, aktualisiert 09:02 Uhr, 771 Aufrufe, 15 Kommentare

Hallo,

nach einigen Tagen des Versuchens und Googelns versuche ich hier eine Lösung für unser Problem zu finden.

Kurzer Background:

Wir scannen in verschiedenen Standorten via Scan-to-FTP Dokumente an einen Ordner. Diese Dokumente sollen dann regelmäßig per Powershell-Script als E-Mailanhang verschickt werden und dann in einen "erledigt"-Ordner verschoben werden.

Problem:

Soweit funktioniert dies auch prächtig ... es sei denn, die anzuhängende Datei wird noch benutzt. Dies ist hin und wieder der Fall, da die Dokumente einige Seiten umfassen und so schon mal ein paar MB groß werden können. Dazu kommen noch "schlechte" Internetleitungen und dadurch ergeben sich hin und wieder Übertragungszeiten von bis zu 2min+ .

Wenn dann genau im Zeitpunkt des Übertragens das Script anspringt und die Datei als Anhang anfügen will meckert er dass die Datei bereits woanders verwendet wird - sie wird noch hochgeladen.
Verschieben tut er die Datei danach allerdings trotzdem in "erledigt", obwohl er keine Mail geschrieben hat. Der Upload wird dann einfach im "erledigt"-Ordner fortgesetzt und beendet. (Eigentlich soll das verschieben nur bei erfolgreichem Mail-Versand stattfinden)

Frage:

Mein Lösungsansatz war jetzt irgendwie zu Prüfen ob die Datei vollständig hochgeladen ist, oder ob ich exklusiven Zugriff darauf bekommen kann. Vielleicht hat auch jemand noch einen anderen Lösungsansatz?

Mfg Balgor
Mitglied: emeriks
09.08.2018 um 08:32 Uhr
Hi,
anderer Ansatz:
Verschiebe nicht, sondern kopiere.
Beim nächsten Durchlauf prüfst Du, welche Datei bereits im Kopie-Ordner ist und löschst sie dann das Original. Dann erst versendest Du die nächsten zu versendenden Dateien.

E.
Bitte warten ..
Mitglied: sabines
09.08.2018 um 08:36 Uhr
Moin,

scan to ftp hört sich nach MFP an, wäre da eine Scan to Mail Funktion nicht zielführender?

Gruss
Bitte warten ..
Mitglied: Balgor
09.08.2018, aktualisiert um 08:51 Uhr
Zitat von sabines:

Moin,

scan to ftp hört sich nach MFP an, wäre da eine Scan to Mail Funktion nicht zielführender?

Gruss

so haben wir es früher gemacht, aber unsere neuen Drucker unterstützen die Funktion nicht mehr

Außerdem haben sich durch das Script auch andere Anwendungsmöglichkeiten ergeben wäre also in jedem Fall schön wenn es irgendwie funktioniert
Bitte warten ..
Mitglied: Balgor
09.08.2018 um 08:55 Uhr
Zitat von emeriks:

Hi,
anderer Ansatz:
Verschiebe nicht, sondern kopiere.
Beim nächsten Durchlauf prüfst Du, welche Datei bereits im Kopie-Ordner ist und löschst sie dann das Original. Dann erst versendest Du die nächsten zu versendenden Dateien.

E.

Hi,

dadurch würde sich das versenden der Mails um einen weiteren Zyklus verzögern, oder denke ich Falsch?

zzt. läuft das Skript alle 5min - das Maximum der Gefühle eigentlich, da es sich größtenteils um Zeitkritische Sachen handelt möchten wir weitere Verzögerungen möglichst vermeiden.

Aber als Backup-Lösung notiert
Bitte warten ..
Mitglied: StefanKittel
09.08.2018 um 09:02 Uhr
Hallo,

schau doch einfach nach dem letzten Änderungsdatum der Dateien und bearbeite nur Dateien die in den letzten 5 Minuten nicht geändert wurden.

Alternativ versuche die Dateien in einen Ordner "flow" zu verschieben bevor Du sie bearbeitest.
Wenn dies fehlschlägt ist die Datei noch nicht fertig.

Am besten wäre es natürlich wenn Du prüfst ob die PDF-Datei ordnungsgemäß abgeschlossen ist.
Aber auch am aufwendigsten.

Stefan
Bitte warten ..
Mitglied: emeriks
09.08.2018 um 09:05 Uhr
dadurch würde sich das versenden der Mails um einen weiteren Zyklus verzögern,
Nein wieso?
1. Durchlauf
  • Datei1 per Mail versenden
  • Datei1 kopieren
  • Datei2 per Mail versenden
  • Datei2 kopieren

2. Durchlauf
  • Datei1 in Kopie & Original vorhanden --> Original löschen
  • Datei2 in Kopie & Original vorhanden --> Original löschen
  • Datei3 per Mail versenden
  • Datei3 kopieren
  • Datei4 per Mail versenden
  • Datei4 kopieren
....
Bitte warten ..
Mitglied: Balgor
09.08.2018 um 09:11 Uhr
Zitat von StefanKittel:

Hallo,

schau doch einfach nach dem letzten Änderungsdatum der Dateien und bearbeite nur Dateien die in den letzten 5 Minuten nicht geändert wurden.

Genau sowas schwebte uns vor, aber wir kommen nicht drauf wie wir dies am geschicktesten machen.

Alternativ versuche die Dateien in einen Ordner "flow" zu verschieben bevor Du sie bearbeitest.
Wenn dies fehlschlägt ist die Datei noch nicht fertig.

Genau das haben wir auch schon gemacht, allerdings ist ihm in diesem Fall wurscht ob die Datei schon fertig ist oder nicht:

Datei wird in den "Empfangs-Ordner" hochgeladen - per Skript in einen "Transfer-Ordner" kopiert und erst im transfer-Ordner sollte alles passieren was wir möchten und anschließend in den "Erledigt-Ordner" kopieren. Dabei sind wir aber davon ausgegangen dass er nur "Fertige" Dateien in den transfer-Ordner kopiert werden. Das stimmt allerdings nicht, er verschiebt die halbfertigen Dateien erst in den transfer-Ordner baut dann den Fehler und kopiert die dann immer noch halbfertige Datei in den Erledigt-Ordner und macht dort dann den Upload zuende.

Am besten wäre es natürlich wenn Du prüfst ob die PDF-Datei ordnungsgemäß abgeschlossen ist.
Aber auch am aufwendigsten.
Stefan

Das wäre natürlich am besten, nur wissen wir nicht wie
Bitte warten ..
Mitglied: emeriks
09.08.2018 um 10:00 Uhr
Zitat von StefanKittel:
schau doch einfach nach dem letzten Änderungsdatum der Dateien und bearbeite nur Dateien die in den letzten 5 Minuten nicht geändert wurden.
Hier muss man sich aber auch merken, wann das Script zuletzt gelaufen ist. Z.B. mittels eines Flags in der Registry. Sonst kann man nicht sicher bestimmen, ob eine Datei beim letzten Lauf schon bekannt war oder nicht. Es kann ja vorkommen, dass das Script mal nicht ausgeführt wird, warum auch immer.
Bitte warten ..
Mitglied: Kraemer
09.08.2018 um 10:33 Uhr
Zitat von emeriks:

Zitat von StefanKittel:
schau doch einfach nach dem letzten Änderungsdatum der Dateien und bearbeite nur Dateien die in den letzten 5 Minuten nicht geändert wurden.
Hier muss man sich aber auch merken, wann das Script zuletzt gelaufen ist. Z.B. mittels eines Flags in der Registry. Sonst kann man nicht sicher bestimmen, ob eine Datei beim letzten Lauf schon bekannt war oder nicht. Es kann ja vorkommen, dass das Script mal nicht ausgeführt wird, warum auch immer.

du denkst zu kompliziert. Zeitpunkt der letzen Änderung länger als 5 Minuten her: Du kannst los legen. Wenn nicht - ignorieren. Beim nächsten mal kommt die selbe Prüfung. Genau so handhabe ich das auch bei alten Lösungen.
Wo es geht nutze ich neuerdings immer wieder den FileSystemWatcher. Ist ein wenig eleganter und spart einem die Prüfung alle paar Minuten. Ist allerdings auch schwieriger zu handeln.

Gruß
Bitte warten ..
Mitglied: colinardo
LÖSUNG 09.08.2018, aktualisiert um 12:05 Uhr
Zitat von Balgor:
Am besten wäre es natürlich wenn Du prüfst ob die PDF-Datei ordnungsgemäß abgeschlossen ist.
Aber auch am aufwendigsten.
Stefan

Das wäre natürlich am besten, nur wissen wir nicht wie
Nicht weiter schwierig:
01.
gci 'D:\Ordner' -Filter *.pdf -File -PipelineVariable file | %{
02.
    try{
03.
        $f = [IO.File]::OpenWrite($_.FullName); $f.Close()
04.
        write-host "File '$($_.Fullname)' is not in access." -F Green
05.
        # Send-MailMessage und Move-Item here
06.

07.
    }catch [System.IO.IOException]{
08.
        write-host "'$($file.FullName)' is still in access." -F Yellow
09.
    }
10.
}
Wer will der kann noch eine Schleife bauen die eine gewisse Zeit wartet bis ein File wieder verfügbar wird. Ansonsten wird's beim nächsten Durchlauf verarbeitet.

Grüße Uwe
Bitte warten ..
Mitglied: Kraemer
09.08.2018 um 10:43 Uhr
Dazu eine Frage lieber Uwe,

gibt es tatsächlich keine andere "saubere" Möglichkeit, als eine Exception zu provozieren? Mir hat man nämlich beigebracht, dass "man sowas nicht tut". Interessant finde ich, dass man unter den ersten Google-Treffern genau den selben Ansatz findet (https://msdn.microsoft.com/de-de/library/bb978912.aspx).

Gruß
Bitte warten ..
Mitglied: colinardo
09.08.2018, aktualisiert um 12:07 Uhr
Mir hat man nämlich beigebracht, dass "man sowas nicht tut".
Wer sagt sowas ? Das ist gängige Praxis und kostet auch keine zus. Zeit...
Bitte warten ..
Mitglied: Balgor
09.08.2018 um 12:28 Uhr
Zitat von colinardo:

Zitat von Balgor:
Am besten wäre es natürlich wenn Du prüfst ob die PDF-Datei ordnungsgemäß abgeschlossen ist.
Aber auch am aufwendigsten.
Stefan

Das wäre natürlich am besten, nur wissen wir nicht wie
Nicht weiter schwierig:
01.
> gci 'D:\Ordner' -Filter *.pdf -File -PipelineVariable file | %{
02.
>     try{
03.
>         $f = [IO.File]::OpenWrite($_.FullName); $f.Close()
04.
>         write-host "File '$($_.Fullname)' is not in access." -F Green
05.
>         # Send-MailMessage und Move-Item here
06.
> 
07.
>     }catch [System.IO.IOException]{
08.
>         write-host "'$($file.FullName)' is still in access." -F Yellow
09.
>     }
10.
> }
11.
> 
Wer will der kann noch eine Schleife bauen die eine gewisse Zeit wartet bis ein File wieder verfügbar wird. Ansonsten wird's beim nächsten Durchlauf verarbeitet.

Grüße Uwe

Genau so was hatten wir am Anfang im Kopf, aber es mangelte an der richtigen Syntax.

Wir haben dies etwas an unsere Bedürfnisse angepasst und siehe da, es funktioniert!
Schön kurz und knackig und einfach nachvollziehbar.

Vielen herzlichen Dank!
Bitte warten ..
Mitglied: StefanKittel
09.08.2018 um 13:21 Uhr
Zitat von Kraemer:
Mir hat man nämlich beigebracht, dass "man sowas nicht tut".
Warum sollte man es nicht tun.
Exceptions sind eine prima Möglichkeit Funktionen und Schleifen sauber zu beenden.
Eine Exception muss ja kein Absturz sein und viele Windows-Funktionen kann man nur damit richtig nutzen.
Stefan
Bitte warten ..
Ähnliche Inhalte
Outlook & Mail

Outlook Signatur nicht als Attachement anzeigen

gelöst Frage von FitforLifeOutlook & Mail25 Kommentare

Hallo, Wir haben seit neuerem Outlook 2016. Die Signatur beinhaltet ein Logo als Bild und in Mails wird dieses ...

Exchange Server

Exchange 2010 Subjekt fuer eingehende E-Mails mit Attachement von extern aendern

Frage von StarmanagerExchange Server2 Kommentare

Hallo Fachleute und Experten, ich habe eine Frage. Kann man am Exchange 2010 ueber eine Regel vielleicht einen Zusatztext ...

Batch & Shell

Remote Powershell ausführen wie lokale Powershell

gelöst Frage von IngenieursBatch & Shell2 Kommentare

Hallo vielleicht ist der Titel nicht ganz deutlich formuliert. Ich möchte wissen ob es eine Möglichkeit gibt Remote Powershell ...

Batch & Shell

Powershell elevated

Tipp von AnkhMorporkBatch & Shell2 Kommentare

Ein kleiner Tipp am Rande für alle PS-Novizen (ich wars einfach leid): Um eine Konsole mit elevated rights schnell ...

Neue Wissensbeiträge
Windows 10

Windows 10 V1809: Rollout ist gestartet - kommt per Windows Update

Information von kgborn vor 3 StundenWindows 10

Eine kurze Information für die Admins, die Windows 10 im Programm haben. Microsoft hat die letzte Baustelle (die Inkompatibilität ...

Sicherheit

Heise Beitrag Passwort-Sammlung mit 773 Millionen Online-Konten im Netz aufgetaucht

Information von Penny.Cilin vor 6 StundenSicherheit1 Kommentar

Auf Heise Online ist folgender Beitrag veröffentlicht worden: Heise Beitrag passwörter geleakt Ich bin mir jetzt nicht ganz sicher, ...

Microsoft Office
TEAMS - Skype for business
Tipp von Nebellicht vor 6 StundenMicrosoft Office

Hallo, ms ersetzt Skype for business durch TEAMS. Also, nicht wundern wenn mit der OFFICE365 Umgebung kein Skype for ...

Windows 10

Windows 10: Cortana und die Suche gehen bald wieder eigene Wege

Information von Frank vor 10 StundenWindows 102 Kommentare

Microsoft hat einen neuen Insider Build von Windows 10 veröffentlicht (Fast Ring, Version 18317), wo die digitale Assistentin "Cortana" ...

Heiß diskutierte Inhalte
Windows Server
Uhren gehen immer wieder falsch
Frage von killtecWindows Server23 Kommentare

Hallo, ich habe folgende Konstellation: 1. Physischer DC Div. Virtuelle DC's auf Hyper-V Servern Die Hyper-V-Server, der Physische DC ...

Windows Server
Client in die Domäne einbinden - Allgemeine Frage dazu
gelöst Frage von RalphTWindows Server18 Kommentare

Moin, ich habe 2 DCs in einer Hauptstelle und 2 DCs in einer Nebenstelle. Ich bringe in der Hauptstelle ...

Windows 10
VM wächst schnell von 14 auf 35 GB an - warum?
Frage von degudejungWindows 1018 Kommentare

Hallo, ich bin ein Freund schlanker VMs und setze daher gerne mit dem Erscheinen einer neuen Win10 Version - ...

Internet
Google-Suchergebnisse, Schnelleinblendung, woher kommt der Inhalt?
gelöst Frage von departure69Internet17 Kommentare

Hallo. Ich bin der Systembetreuer einer kleinen Gemeinde in Süddeutschland. Wir betreiben auch eine Leihbücherei. Eine Kundin hat letzten ...