crashzero
Goto Top

Ordnerprüfung ob Datenzugang beendet

1. Ist es via Powershell möglich einen Ordner zu überwachen ob noch Daten zugeführt werden ?

Beispiel :
Ordner X wird auf Dateneingang überwacht, ersten wenn keine Daten mehr eingehen wird nach x Sekunden Wartezeit eine weitere Aktion ausgelöst.

2. Ist es via Powershell möglich das ein Port auf dem auf Dateneingang "gehorcht" wird pausiert wird bis er via Powershell wieder "horcht" ? [Nicht über Firewallregeln]

Content-ID: 4263724304

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

Ausgedruckt am: 17.11.2024 um 03:11 Uhr

emeriks
emeriks 13.10.2022 um 08:41:30 Uhr
Goto Top
zu 1)
Ja, das ist möglich.

zu 2)
Karamschi buffinaze kaluppe?
Crusher79
Crusher79 13.10.2022 um 08:48:45 Uhr
Goto Top
Hallo,

zu 1: Jain. Prinzipiell schon, nur wann endet die Übergabe? Gehören die Dateien zusammen und dürfen nicht zerrissen werden? Z.B. mehrere Leitrechnerdaten o.ä. Man kann auf LastWriteTime o.ä. prüfen. Nur wenn man dann pauschal x-Sekunden wartet, können wieder neue Daten rein kommen. Ich hätte an der Stelle ein Problem mit der Logik an der ganzen Sache!

zu 2: Ähm, waaaaaassssssssssssssss ?

Ohne Firewall sprichst du mehr von einen Socket einer Anwendung/ Dienst Whatever? Um sowas zu machen, müssten man die Anwendung oder Dienst dahinter beenden und neu starten! Wenn eine Applikation wie FTP läuft, ist auch der Port verfügbar. Schaltet man das kurz ab, ist der Port weg.

mfg Crusher
Crashzero
Crashzero 13.10.2022 um 09:41:19 Uhr
Goto Top
@Crusher
1. Also der Datenzugang ist flüssig jedoch in der Zeitlänge nie gleich, daher die X-Sekunden Wartezeit nachdem festgestellt wurde das keine weiteren Daten mehr eingehen.
Es sind einige hundert Files die hin- und wieder dort eingehen.
Die werden dann weiterverarbeitet und das Verzeichnis wieder geleert so das dann theoretisch wieder eine Überwachung auf Datenzugang gestartet werden kann.
Es laufen NICHT durchgehend immer mal wieder einzelne Daten rein. es ist IMMER ein Schwall an Daten der dann aber auch einige Minuten aufhört bevor ev. wieder ein ganzer Schwall einläuft und ach direkt weiterverarbeitet wird.

2. Naja es ist ein Anwendung die auf einem Port horcht und dort Daten bekommt (Das sind die Daten zu Punkt 1).
Die Anwendung kann/darf nicht beendet werden (Um den Port zu "pausieren" / "beenden".Leider gibt die Anwendung die dort läuft auch nichts weiteres her einen Dateneingang abzuarbeiten und dann ertsmal zu warten, daher die Idee via Powershell das für eine kurze Zeit zu unterbinden.
Crashzero
Crashzero 13.10.2022 um 09:42:01 Uhr
Goto Top
Zitat von @emeriks:

zu 1)
Ja, das ist möglich.

zu 2)
Karamschi buffinaze kaluppe?

Cool, hat gut geholfen - Läuft jetzt.
emeriks
emeriks 13.10.2022 um 09:53:56 Uhr
Goto Top
Zitat von @Crashzero:
Cool, hat gut geholfen - Läuft jetzt.
Wenn Du es verstanden hast, dann ist das okay.
Crusher79
Crusher79 13.10.2022 um 09:55:08 Uhr
Goto Top
Was für eine Aktion soll das sein?

Trotzdem: Wie ermittelt man hier das größte zeitliche Gap? Taskplaner kann auch jede Minute was ausführen. Oder man lässt das PS Script endlos weiterlaufen. Ist ganz einfach nur auflisten, sortieren und aktuelle Uhrzeit mit LastWriteTime vrergleichen. Dann wären wir schon fast fertig. Im letzten Schritt prüfen ob der Abstand in Sekunden groß genug und ist Befehl abfeuern.

Deine 2. Frage ist also schon von selber beantwortet. Wenn man nicht via Command-Line, API oder DLL da ran kann, oder sogar ein GUI Button fehlt, hat man da keine Chance.

Man könnte das Ganze ggf. ncoh umstricken, in dem man die Daten in einen anderen Ordner einlaufen lässt. Und dann von dort in den Ordner, wo die Anwendung drauf lauscht. Macht aber nur Sinn, wenn man die Daten vorher kontrollieren oder manipulieren will.

Wenn Du dir der Peaks bei den einlaufenden Daten bewusst bist, sollte es auch mit einer Schleife gehen. Abstand in Sekunden kann man jederzeit anpassen.

Nichth vergessen, dass sowas 10 mal und mehr parallel laufen kann. Selbstgebaute Lock-File und Prüfung verhindert das. Sonst hätte man nur Chaos.

Hierwie ich das meine. Genauso kann man auch Lock-Datei und die Daten vergleichen. Lock Vergleich nehm ich immer, wenn ich die automatisch aufheben will. Ansonsten kann man die auch manuell raus nehmen. Wenn wir uns nun innerhalb der Schleife bewegeen, kann die Überwachung auch zu Zeit Y beenet werden. Via Taskplaner dann einfach neu starten.

Dazu müsste man noch wissen, von wann bis wann die Überwwachung sein soll. 1 Pause am Tag wäre nicht verkehrt.
Crusher79
Crusher79 13.10.2022 aktualisiert um 10:16:23 Uhr
Goto Top
Oh man. Sind wir nun fertig oder was?

Du machst mich fertig! Hier warst du doch auch oder?

Wir sehen da eine Schleife, Datumsvergleich etc. Was willst du ?????????

Sollen wir jetzt schreiben oder reicht dir das? Du hast ja scheinbar schon gescripted. Das sah doch ganz gut aus.

Wenn du da ein Verzeichnis löschen willst, kannst auch vergleichen! Wie @emeriks schon indirekt sagte: Wir brauchen wenn mehr!

Einige haben keine Ahnung und fangen mit Batch an. Bei dir sehe ich da scheinbar mehr. Also was genau willst du nun konkret?

Powershell? JA
Schleife und Prüfung: JA geht
Aufhübschen ob Task schon läuft: JA geht auch mit PS
Halbmanuell auswerten? JA geht auch. Wenn du scheinbar weißt, was du tust und wie die Daten rein kommen kann man das aus der Hüfte schießen.
Aktion ausführen? JA auch das geht? Welche denn?

Programm/ Socket beenden/ starten: JAIN. Nur wenn der Programmierer es so ähnlich vorgesehen hat!
Crashzero
Crashzero 13.10.2022 um 10:17:01 Uhr
Goto Top
@Crusher
Jup, das ganze läuft bereits in einer Schleife (Mit noch sehr viel mehr Aktionen, da wird einiges umgebaut an den Dateien).
Es läuft zur Zeit eine Ordnerüberwachung, wenn Dateneingang wartet das Script 40 Sekunden und fängt dann erst an die Daten weiter zu verarbeiten.
Ich habe das max. Zeitfenster einfach mal geloggt und die Wartezeit danach ausgetrimmt.

Nun schwirrt mir aber der Worst-Case durch den Kopf, was ist wenn der Datenzugang länger als 40 Sekunden dauert ?
Daher der Grundgedanke - Kann ich ev. für eine Zeit den Dateneingan via Port-Pause "pausieren" bis ich sehe das der weitere Workflow abgearbeitet wurde.

Das mit der Prüfung der Dateizeit und Bemessung einer minimalen Abweichung ist eine gute Idee, mein Ansatz bisher war/ist : Ich lasse durch das PS-Script (Läuft sowieso dauerhaft, endlos) die Anzahl der Dateien zählen (Sekundentakt) und wenn sich die Anzahl länger als z.B. 5 oder 10 Sekunden nicht ändert lasse ich den Workflow starten .....

zu 2. Port Pausieren etc.
Ja, da gehen mir auch die Ideen aus, mein Gedankenansatz ist : Firewall aktivieren, alles freigeben (Es soll darauf nichts reglementiert werden - Keine Ahnung warum, lokale MS Firewall ist eigentlich nicht erwünscht) und dann via PS und Firewallblockierung eine zeitlich begrenzte Blockierung des annehmenden Ports setzen bis der Workflow abgearbeitet ist, dann Port via PS in der Firewall wieder freigeben. Das könnte funktionieren (Ist halt viel Code, dachte geht einfacher) da ich weiß wenn der Dateisender (Server) seine Daten nicht los wird, versucht er es später erneut, es würde also nichts verloren gehen .....
Crashzero
Crashzero 13.10.2022 um 10:22:14 Uhr
Goto Top
Zitat von @Crusher79:

Oh man. Sind wir nun fertig oder was?

Du machst mich fertig! Hier warst du doch auch oder?

Wir sehen da eine Schleife, Datumsvergleich etc. Was willst du ?????????

Sollen wir jetzt schreiben oder reicht dir das? Du hast ja scheinbar schon gescripted. Das sah doch ganz gut aus.

Wenn du da ein Verzeichnis löschen willst, kannst auch vergleichen! Wie @emeriks schon indirekt sagte: Wir brauchen wenn mehr!

Einige haben keine Ahnung und fangen mit Batch an. Bei dir sehe ich da scheinbar mehr. Also was genau willst du nun konkret?

Powershell? JA
Schleife und Prüfung: JA geht
Aufhübschen ob Task schon läuft: JA geht auch mit PS
Halbmanuell auswerten? JA geht auch. Wenn du scheinbar weißt, was du tust und wie die Daten rein kommen kann man das aus der Hüfte schießen.
Aktion ausführen? JA auch das geht? Welche denn?

Programm/ Socket beenden/ starten: JAIN. Nur wenn der Programmierer es so ähnlich vorgesehen hat!

jup, hast ja recht, die Vorgaben machen mir zu schaffen - Ordnerüberwachung prinzipiell kein Thema, da ich habe bisher nicht in der Lage war/bin einen erneuten Datezugang zu bremsen bevor der Workflow durchgelaufen ist und die Vorgabe das keine Aktivierung der lokalen Firewall (Könnte dort ja via PS den Port blocken) genutzt werden soll
Crusher79
Crusher79 13.10.2022 um 10:24:08 Uhr
Goto Top
Powershell Objekte können verglichen werten und auch eine Zeitspanne lässt sich auf alles runterbrechen: Tage, Stunden, Minuten, Sekunden. Würde da immer NICHT selber rechnen oder Minuten als INT einsetzen. Es ist schon alles da. Wenn man Objekte mit Datum vergleicht hat man alles zur Hand.

Pausieren geht nur, wenn es die Schnittstelle zulässt! Im blödesten Fall sogar mit GUI und sowas wie AutoIT. Das wäre aber arg lästig. Ansonsten läuft alles weiter.

Es gebe nur die Alternative: 2x Ordner!

1x Sammelordner
1x verabeiten.

Du verschiebst dann von A nach B und es wird alles weiterhin aufgenommen.

Ähm was für ein Datenzugang! Bei welchen Meilestein sind wir! Meinst du, was rein kommt an Files oder was deine weiteren Aktionen in die DB o.ä. schieben? Ich verstehe gerade nicht, wo du da bist. Sonst wäre es doch egal. Dauert halt länger als 40 Sekunden. Man könnte es monitoren über Log-File oder E-Mail. Das eien Alarm Mail ausgelöst wird. Hab ich bei usn für DaSi und andere Prozesse.
Crusher79
Crusher79 13.10.2022 aktualisiert um 10:32:11 Uhr
Goto Top
Wenn du ein Zeitproblem hast kannst du auch protokollieren und dies als Leitdatei abarbeiten.

Oder "in progress" so abbilden, dass du genaue jene Dateien in einen Array packst. Ggf. wegen gleicher Dateinamen vorher umbenennst und mit UID oder sowas den Namen ersetzt.

Egal was da einströmt, dann weißt du zumindest wo du gerade stehst. UID ist immer eindeutig. So Dinge wie Copy/ Move oder Rename gehen ja auch schnell. Zumindest wenn die File nicht gelocked ist.

Du kannst dir damit ggf. die Sachen so zurecht legen, dass später nichts kollidieren kann.

Stichtwort "Leitdatei" und der Ordner ist quasi egal.
micneu
micneu 20.10.2022 um 18:58:23 Uhr
Goto Top
Moin @Crashzero,

ich habe mal versucht alles zu verstehen, aber was ich mich die ganze zeit frage (vielleicht überlesen)
- um was für einen dienst handelt es sich der die Daten liefert
- wie kommen die Daten (internet z. b. FTP, oder Lokales Netzwerk)?
- Wenn es ein Spezielles Produkt/Programm ist was die Daten Liefert dann nenne doch den Namen?
- Um welche Größenordnung reden wir hier (KB, MB, GB, TB)?

Warum macht ihr das unter Windows, hat es bestimmte gründe?
Crashzero
Crashzero 28.01.2023 um 07:20:41 Uhr
Goto Top
Moin, also …
1. Es läuft auf dem Server der die Daten bekommt eine Dicom-Retrieve Dienst (Medizintechnisch aus der Radiologie für „Bildempfänger mit Dicom-Daten“
Es liefert also ein PACs (Bilddatenspeicher) also Dicom-Send (Patient mit aktuellen Bilddaten wird ausgewählt und an den angelegten Dicom-Retrieve-Knoten (Empfangsserver mit dem Programm zur Überarbeitung und Sendefunktion ins Internet) gesendet.
Der Retrieve nimmt dann alles bearbeitet den Eingang (Liest Dicom-Daten aus usw.), verschlüsselt das und überträgt das verschlüsselt ins Internet
2. Dir Daten sind vorerst nur intern vom PACS-Server an den internen Verarbeitungsserver, dieser überarbeitet und verschlüsselt alles und sendet diese dann ins Internet
3. Die Daten liefert eines der bekanntesten und verbreitesten PACS Server der Medizintechnik/Radiologie und ist bis dahin nicht relevant.
4. Die Größenordnungen sind unterschiedlich, je nach Aufnahmenenart (CT,MRT,Schichten,Ebenen) kann das von 1MB bis hin in den Mehrfachen Gb-Bereich gehen.
5. Muss nicht zwingend Windows sein, ändert aber nix am Problem das ich irgendwie keine Rückmeldung bekomme ob der Übertragung vom PACs Server an der Übertragungsserver abgeschlossen ist um einen Vorgang auszulösen der einen weitere Übertragung vorerst verhindert damit der Übertragungsserver die Daten erstmal „aufbereiten“ kann und nicht bereits erneut, andere, Patientendaten bereits wieder in die noch dortliegenden Daten einfließen.
Ich suche sozusagen nach einer Lösung wenn nach x-Sekunden keine Änderungen mehr am Inhalt stattfindet z.B. der Port oder die Übertragung eben solange „pausiert“ wird bis alles abgearbeitet wurde und der Retrieve-Konten erst dann wieder einen Empfang zulässt.
micneu
micneu 28.01.2023 um 09:35:52 Uhr
Goto Top
ok, jetzt habe ich es verstanden, ich hatte vor über 10 jahren mit sowas mit dicom4j gemacht bin ich der meinung (alles über openvpn zu/von den praxen)
Crashzero
Crashzero 28.01.2023 um 14:17:41 Uhr
Goto Top
Ja, ich denke du weißt was ich meine.
Bei uns gehts bei der sicheren Bildversendung um dringend/eilig (Vor Not-OPs z.B.) angeforderte Aufnahmen (Krebsboard) zu Universitäten bzw. oP Teams, es musste also schnell UND sicher sein.
Haben wir sauber UND sicher gut umgesetzt.
Nun gehts aber auch um ein Patientenportal mit Generierung Zugangsdaten (QR-Code, zufällig generierte Zugangsdaten,Verfallsdatum(Automatische Löschung), ABER auch eine integrierte Dicom-Viewer-Lösung online (Für behandelnde Ärzte etc.), auch sauber umgesetzt.
Zur Zeit haben wir (Wegen Gefahr von Vermischung von Patientendaten) es so gelöst das am Verarbeitungsserver für jeden Workstation die Aufnahmen für Patienten anfordern kann eine eigene Instanz laufen, wenn wir einen Weg finden den Empfang zeitweise zu pausieren damit der Verarbeitungsserver erstmal Patient X abarbeite bevor er mit Patient Y weitermacht, könnte man das mit einer einzelnen Instanz laufen lassen.