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, 598 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 ...

Batch & Shell

Problem Auslesen einer Internetseite mit Powershell

gelöst Frage von c20082005Batch & Shell11 Kommentare

Hallo zusammen, ich brauche eure Hilfe. Ich habe ein Powershell-Skript erstellt, mit dem ich eine Internetseite auslese, nachdem ich ...

Batch & Shell

PowerShell Transkript Problem

Frage von MarabuntaBatch & Shell5 Kommentare

Hi, ich will in einem Transkript Log(Start-Transcript) die Ordnerinhalte auflisten Das funktioniert: Das hier allerdings nicht: Der entsprechende Eintrag ...

Batch & Shell

Problem mit Powershell Backup-Skript

gelöst Frage von ahussainBatch & Shell2 Kommentare

Hallo allerseits, ich habe mir ein kleines Backup-Skript geschrieben, welches beim Einstecken eines USB Sticks dessen Inhalte auf die ...

Neue Wissensbeiträge
Drucker und Scanner
HP-MF-Drucker per Fax angreifbsr
Information von Lochkartenstanzer vor 1 TagDrucker und Scanner3 Kommentare

Endlich eine sinnvolle Verwendung für Faxe: Damit kann man offensichtlich den Drucker übernehmen. lks

Router & Routing

Das pfSense Buch ist jetzt für jeden kostenlos zu beziehen

Tipp von magicteddy vor 2 TagenRouter & Routing2 Kommentare

Bisher war das Buch nur für zahlende Unterstützer verfügbar, jetzt steht für Jedermann kostenlos zur Verfügung. Siehe auch The ...

Firewall

Möglicherweise neue Sicherheitslücke in Mikrotik-Firmware

Information von LordGurke vor 4 TagenFirewall3 Kommentare

Hallo zusammen, vor ein paar Monaten gab es ja bereits eine Sicherheitslücke in der Firmware von Mikrotik-Routern, über welche ...

Erkennung und -Abwehr
Rechner hacken mit Cortana, auch Remote
Information von Lochkartenstanzer vor 5 TagenErkennung und -Abwehr3 Kommentare

heise berichtet über den Vortrag von der Blackhat Open Sesame: Picking Locks with Cortana. Einige Fehler sind schon gefixt, ...

Heiß diskutierte Inhalte
Windows 10
WIN 10 1803 - LTE Stick kein Internetzugriff
Frage von killtecWindows 1023 Kommentare

Hallo, ich habe mit einem Windows 10 1803 Probleme mit einem LTE-Stick. Das gleiche Problem ist bei mehreren Rechnern ...

CPU, RAM, Mainboards
Xeon E5620: noch schnell genug?
Frage von ahussainCPU, RAM, Mainboards19 Kommentare

Hallo allerseits, ich habe die Möglichkeit, aus Restbeständen einen Tower mit Xeon E5620 CPU und 24 GB RAM zu ...

Datenbanken
MySQL Datenbank Import Aufgabe für mehrere .csv dateien
Frage von Marcel1989Datenbanken18 Kommentare

Hi, ich komm nicht weiter. Ich hab auf einem Windows Server 2012 r2 eine MariaDB/MySQL laufen. Nun soll diese ...

Peripheriegeräte
Steckdose(nleiste) mit Schwellwert für off und mit externem Taster
Frage von ahstaxPeripheriegeräte16 Kommentare

Hallo, ich suche eine Steckdose oder Steckdosenleiste mit externem Taster und Schwellwerterkennung. Zu realisieren ist folgendes: Ein PC soll ...