Hintergrund
In einer medizinischen Organisation implementierten sie Lösungen, die auf Orthanc PACS-Servern und dem DICOM-Client von Radiant basieren. Während des Setups haben wir herausgefunden, dass jeder DICOM-Client auf PACS-Servern wie folgt beschrieben werden sollte:
- Kundenname
- AE-Name (muss eindeutig sein)
- Ein TCP-Port, der auf der Clientseite automatisch geöffnet wird und DICOM-Untersuchungen vom PACS-Server empfängt (d. H. Der Server schiebt sie sozusagen zum Client, indem er zuerst die Verbindung initiiert).
- IP-Adresse
Nach dem Einrichten von Radiant-Clients wurden die folgenden Informationen zur Prüfung erhalten: Für jeden Client führte das Einrichten der Software mit den oben genannten Parametern zum Ausfüllen der Datei
pacs.xml , die sich im Benutzerprofil befand (Pfad:
% APPDATA% \ RadiantViewer \ pacs.xml ). Gleichzeitig unterschied sich die Konfiguration eines Clients von einem anderen durch mindestens zwei Parameter (der AE-Name ist für alle unterschiedlich und der Port ist grundsätzlich gleich, mit Ausnahme von Terminal-Clients, die auf demselben Server ausgeführt werden - dort mussten Sie auch die Ports unterschiedlich zuweisen).
Beispieldatei pacs.xml über den
Link :
Etwa ein halbes Jahr lang war alles in Ordnung, das System funktionierte ... und dann erreichten uns die "
Fallstricke ":
- Wir müssen mehrere neue PACS-Server in Betrieb nehmen, die die alten ersetzen (wo der Speicherplatz knapp wurde). PACS-Server in virtuellen Maschinen, aber darum geht es nicht.
- Wir müssen die einzigartigen Konfigurationen auf 200 Maschinen zentral (mit zwei verschiedenen Parametern) ändern (ihre Anzahl wird regelmäßig erhöht).
- Angesichts der Wachstumsrate des Untersuchungsvolumens handelt es sich bei der Lösung nicht um eine einmalige, sondern um eine replizierte und regelmäßige Lösung (z. B. einmal alle 3 bis 5 Monate).
Die Lösung ist unten.
Die Auswahl der Werkzeuge zur Lösung des Problems
Anfänglich gab es Versuche, eine Lösung zu finden, die die Datei pacs.xml auf der Clientseite änderte und Änderungen an der Liste der PACS-Server vornahm, ohne den AE-Namen und die TCP-Porteinstellungen zu berühren. Zu dieser Zeit basierten Windows-Clients sowohl auf Windows XP als auch auf Windows 7 - daher gab es Versuche, so etwas auf der Basis von VBScript zu schreiben. Leider war es nicht möglich, eine solche Aufgabe zu bewältigen, da es an Erfahrung mangelte, etwas Kompliziertes und Komplexes in dieser Sprache zu schreiben. Versuche zu finden und neu zu schreiben waren ebenfalls erfolglos (es sollte beachtet werden, dass es bereits einen anderen Plan in meinem Kopf gab, so dass ich mich nicht länger als 3-4 Stunden mit VBScript beschäftigte).
Am Ende habe ich mich für folgende Lösung entschieden:
- Sammeln Sie alle pacs.xml-Dateien an einem Ort auf einem Server in einer Netzwerkfreigabe nach Gruppenrichtlinien.
- Ändern Sie Dateien in großen Mengen (es wurden bereits Erfahrungen mit der Lösung solcher Probleme gesammelt - mit Perl).
- Verwenden Sie außerdem Gruppenrichtlinien, um die Clienteinstellungen zu aktualisieren.
Sammeln von Dateien mithilfe von Gruppenrichtlinien
Der einfachste Teil ist, dass ein Client, wenn er sich in sein Profil einloggt, mit seinen Rechten eine bestimmte .bat-Datei ausführt, in der sie geschrieben ist:
echo off If exist %APPDATA%\RadiantViewer\pacs.xml copy %APPDATA%\RadiantViewer\pacs.xml \\srv.test.local\pconfigs$\pacs-%COMPUTERNAME%-%USERNAME%.xml
Daher werden pacs.xml-Dateien auf dem Server in einer versteckten Ressource gesammelt, deren Name Informationen enthält, von welchem Computer und von welchem Benutzer diese Konfiguration kopiert wurde.
Am schwierigsten war es, darauf zu warten, dass alle Benutzer diese Richtlinie ausfüllen.
Ändern von Konfigurationen mithilfe eines Perl-Skripts
Wir benötigen
Active Perl für Windows von ActiveState sowie das XML :: Writer-Modul, das mit dem Befehl
ppm install XML-Writer installiert werden kann.
Das Skript selbst erwies sich als recht einfach:
use XML::Writer;
Das Prinzip seiner Arbeit:
- Wir öffnen das Verzeichnis, in dem wir pacs.xml-Konfigurationen von Clients gesammelt haben, und legen die Liste der Dateien in einem Array von Skalaren (@report_files) ab.
- In einer Schleife verarbeiten wir jeweils eine Datei und lesen sie Zeile für Zeile.
- Teilen Sie jede Zeile mit split in 5 Teile und verwenden Sie Anführungszeichen als Trennzeichen.
- Wir finden die Zeile mit dem Wort Listener und geben für jede Datei zwei eindeutige Daten ein (Client-AE-Name und TCP-Portnummer).
- Danach erstellen wir einfach eine neue XML-Datei, geben eindeutige Parameter ein und fügen dann die erforderliche Anzahl von PACS-Servern mit ihren Parametern ein - d. H. etwas, für das alles begonnen wurde )
- Schreiben Sie die neue XML-Datei über die alte.
Es ist zu beachten, dass ich dieses Skript nicht vollständig automatisch verwende. Tatsächlich kopiere ich die gesammelten Konfigurationen in ein separates Verzeichnis, führe das Skript aus und ändere sie alle zusammen. Dann eine Stichprobenprüfung - und die Konfigurationen können wieder in die Maschinen gegossen werden.
Verteilen geänderter pacs.xml-Dateien an Clients
Das Einfachste, was mir in den Sinn kam, war, Änderungen an einer bereits funktionierenden .bat-Datei vorzunehmen, die Konfigurationen von Clients sammelt und eine Zeile hinzufügt:
If exist %APPDATA%\RadiantViewer\pacs.xml copy /Y \\srv.test.local\pconfigsnew$\pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%\RadiantViewer\pacs.xml
Die resultierende .bat-Datei sieht folgendermaßen aus:
@echo off If exist %APPDATA%\RadiantViewer\pacs.xml copy %APPDATA%\RadiantViewer\pacs.xml \\srv.test.local\pconfigs$\pacs-%COMPUTERNAME%-%USERNAME%.xml If exist %APPDATA%\RadiantViewer\pacs.xml copy /Y \\srv.test.local\pconfigsnew$\pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%\RadiantViewer\pacs.xml
Fazit
Dies ist die „
kniehohe “ Lösung. Wir haben es bereits zweimal getestet (im September 2018 und im Februar 2019), während der Flug normal war. Natürlich werden nicht 100% der Clients aktualisiert, aber nahe an diesem Wert - wir erledigen den Rest remote. Skript als
Referenz .