Contexte
Dans une organisation médicale, ils ont mis en œuvre des solutions basées sur les serveurs Orthanc PACS et le client DICOM de Radiant. Au cours de l'installation, nous avons découvert que chaque client DICOM devait être décrit dans les serveurs PACS comme suit:
- Nom du client
- Nom AE (doit être unique)
- Un port TCP qui s'ouvre automatiquement du côté client et reçoit des examens DICOM du serveur PACS (c'est-à-dire que le serveur les pousse vers le client, pour ainsi dire, en commençant par la connexion)
- Adresse IP
Après avoir configuré les clients Radiant, les informations suivantes ont été examinées: pour chaque client, la configuration du logiciel avec les paramètres ci-dessus a conduit à remplir le fichier
pacs.xml , qui se trouvait dans le profil utilisateur (chemin:
% APPDATA% \ RadiantViewer \ pacs.xml ). En même temps, la configuration d'un client par rapport à un autre différait par au moins deux paramètres (le nom AE est différent pour tout le monde et le port est fondamentalement le même, sauf pour les clients terminaux fonctionnant sur le même serveur - là, vous deviez également affecter des ports différents).
Exemple de fichier pacs.xml à partir du
lien :
Pendant environ six mois, tout allait bien, le système a fonctionné ... et puis les "
pièges " nous sont parvenus:
- Nous devons mettre en service plusieurs nouveaux serveurs PACS, qui remplaceront les anciens (là où l'espace disque commençait à manquer). Serveurs PACS dans des machines virtuelles, mais ce n'est pas tout;
- Nous devons en quelque sorte changer les configurations uniques de manière centralisée (avec deux paramètres différents) sur 200 machines (leur nombre augmente régulièrement);
- Étant donné le taux de croissance du volume d'examens, la solution n'est pas une solution unique, mais une solution répliquée et régulière (par exemple, une fois tous les 3 à 5 mois).
La solution est ci-dessous.
Le choix des outils pour résoudre le problème
Initialement, il y a eu des tentatives pour trouver une solution qui a changé le fichier pacs.xml du côté client et apporté des modifications à la liste des serveurs PACS sans toucher au nom AE et aux paramètres du port TCP. À cette époque, les clients Windows étaient basés sur Windows XP et Windows 7 - il y a donc eu des tentatives d'écrire quelque chose comme ça basé sur VBScript. Mais hélas, il n'était pas possible de maîtriser une telle tâche, étant donné le manque total d'expérience dans l'écriture de quelque chose de compliqué et complexe dans cette langue. Les tentatives de recherche et de réécriture ont également échoué (il convient de noter qu'il y avait déjà un plan différent dans ma tête, donc je n'ai pas pris la peine de VBScript pendant plus de 3-4 heures).
Finalement, je suis tombé sur la solution suivante:
- Collectez tous les fichiers pacs.xml par stratégie de groupe en un seul endroit sur n'importe quel serveur d'un partage réseau;
- Modifier des fichiers en masse (il y a déjà eu de l'expérience dans la résolution de tels problèmes - en utilisant Perl);
- Utilisez également des stratégies de groupe pour mettre à jour les paramètres du client.
Collecte de fichiers à l'aide de la stratégie de groupe
La partie la plus simple est que lorsqu'un client se connecte à son profil, il exécute avec ses droits un certain fichier .bat dans lequel il est écrit:
echo off If exist %APPDATA%\RadiantViewer\pacs.xml copy %APPDATA%\RadiantViewer\pacs.xml \\srv.test.local\pconfigs$\pacs-%COMPUTERNAME%-%USERNAME%.xml
Ainsi, les fichiers pacs.xml seront accumulés sur le serveur dans une ressource cachée, dont le nom contient des informations de quel ordinateur et de quel utilisateur cette configuration a été copiée.
Le plus difficile a été d'attendre que tous les utilisateurs remplissent cette politique.
Modification des configurations à l'aide d'un script Perl
Nous avons besoin d'
Active Perl pour Windows d'ActiveState, ainsi que du module XML :: Writer, qui peut être installé à l'aide de la commande
ppm install XML-Writer .
Le script lui-même s'est avéré assez simple:
use XML::Writer;
Le principe de son travail:
- Nous ouvrons le répertoire dans lequel nous avons collecté les configurations pacs.xml des clients et mettons la liste des fichiers dans un tableau de scalaires (@report_files);
- En boucle, nous traitons un fichier à la fois et le lisons ligne par ligne;
- En utilisant la division, divisez chaque ligne en 5 parties, en utilisant des guillemets comme séparateur;
- Nous trouvons la ligne avec l'écouteur de mots et mettons en deux variables des données uniques pour chaque fichier (nom AE client et numéro de port TCP);
- Après cela, nous créons simplement un nouveau fichier XML, y entrons des paramètres uniques, puis insérons le nombre requis de serveurs PACS avec leurs paramètres - c.-à - d. quelque chose pour lequel tout a commencé )
- Réécrivez le nouveau fichier XML au-dessus de l'ancien.
Il convient de noter qu'en fait, je n'utilise pas ce script de manière complètement automatique - en fait, je copie les configs collectées dans un répertoire séparé, puis exécute le script et les modifie toutes ensemble. Ensuite, un contrôle aléatoire - et les configurations peuvent être réinjectées dans les machines.
Distribution de fichiers pacs.xml modifiés aux clients
La chose la plus simple qui m'est venue à l'esprit a été d'apporter des modifications à un fichier .bat déjà fonctionnel qui collecte les configurations des clients et d'ajouter une ligne:
If exist %APPDATA%\RadiantViewer\pacs.xml copy /Y \\srv.test.local\pconfigsnew$\pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%\RadiantViewer\pacs.xml
Le fichier .bat résultant ressemble à ceci:
@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
Conclusion
Telle est la solution «à
hauteur de genou ». Nous l'avons déjà testé deux fois (en septembre 2018 et en février 2019), alors que le vol était normal. Bien sûr, il ne met pas à jour 100% des clients, mais proche de cette valeur - nous finissons le reste à distance. Script par
référence .