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, 705 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
Windows Userverwaltung

Passwortwechsel in der Domain bei Anmeldung erzwingen

Anleitung von Looser27 vor 1 StundeWindows Userverwaltung

Nachdem es immer wieder User geschafft haben, sich während des laufenden Betriebes auszusperren, habe ich nach einer Möglichkeit gesucht, ...

Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 3 TagenAusbildung37 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 5 TagenSpeicherkarten6 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 5 TagenSicherheit1 Kommentar

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Passwortwechsel Zeitpunkt festlegen
gelöst Frage von Looser27Windows Userverwaltung29 Kommentare

Guten Morgen liebe Kolleginnen und Kollegen, da es eine Userin in meinem Urlaub geschafft hat, sich vom AD vollständig ...

Windows Server
Probleme im AD am Außenstandort
gelöst Frage von emeriksWindows Server19 Kommentare

Hi, wir haben ein Problem mit AD und GPO am Außenstandort und ich stehe momentan mächtig auf dem Schlauch. ...

Microsoft
Netzlaufwerksordner Berechtigungen Speichern unter aus Programmen
Frage von ITler7Microsoft17 Kommentare

Moin, bin in ein neues Unternehmen eingetreten und habe die Anforderung bekommen Berechtigungen auf einige Ordner anzupassen, da bisher ...

CMS
Seltsame Joomla-Meldung auf unserer WebSite
Frage von Winfried-HHCMS14 Kommentare

Hallo in die Runde! Kennt sich jemand mit Joomla aus? Im Backend unserer WebSite lesen wir seit einiger Zeit ...