Antecedentes
En una organización médica, implementaron soluciones basadas en servidores Orthanc PACS y el cliente DICOM de Radiant. Durante la configuración, descubrimos que cada cliente DICOM debe describirse en los servidores PACS de la siguiente manera:
- Nombre del cliente
- Nombre de AE (debe ser único)
- Un puerto TCP que se abre automáticamente en el lado del cliente y recibe exámenes DICOM del servidor PACS (es decir, el servidor los empuja hacia el cliente, por así decirlo, iniciando la conexión primero)
- Dirección IP
Después de configurar, los clientes de Radiant recibieron la siguiente información para su consideración: para cada cliente, la configuración del software con los parámetros anteriores llevó a completar el archivo
pacs.xml , que se encontraba en el perfil del usuario (ruta:
% APPDATA% \ RadiantViewer \ pacs.xml ). Al mismo tiempo, la configuración de un cliente de otro difería al menos en dos parámetros (el nombre de AE es diferente para todos, y el puerto es básicamente el mismo, excepto para los clientes terminales que se ejecutan en el mismo servidor; allí también tenía que asignar los puertos diferentes).
Ejemplo de archivo pacs.xml desde el
enlace :
Durante aproximadamente medio año todo estuvo bien, el sistema funcionó ... y luego nos llegaron los "
escollos ":
- Necesitamos poner en funcionamiento varios servidores PACS nuevos que reemplazarán a los antiguos (donde el espacio en disco comenzó a agotarse). Servidores PACS en máquinas virtuales, pero no se trata de eso;
- Necesitamos cambiar de alguna manera las configuraciones únicas centralmente (con dos parámetros diferentes) en 200 máquinas (su número aumenta regularmente);
- Dada la tasa de crecimiento del volumen de exámenes, la solución no es una solución única, sino una solución replicada y regular (por ejemplo, una vez cada 3-5 meses).
La solución está abajo.
La elección de herramientas para resolver el problema.
Inicialmente, hubo intentos de encontrar alguna solución que cambiara el archivo pacs.xml en el lado del cliente e hiciera cambios en la lista de servidores PACS sin tocar el nombre de AE y la configuración del puerto TCP. Los clientes de Windows en ese momento se basaban tanto en Windows XP como en Windows 7, por lo que hubo intentos de escribir algo así basado en VBScript. Pero, por desgracia, no fue posible dominar tal tarea, en vista de la falta total de experiencia en escribir algo complicado y complejo en este idioma. Los intentos de encontrar y reescribir tampoco tuvieron éxito (debe tenerse en cuenta que ya había un plan diferente en mi cabeza, por lo que no me molesté con VBScript durante más de 3-4 horas).
Al final, me decidí por la siguiente solución:
- Recopile todos los archivos pacs.xml en un lugar en un servidor en un recurso compartido de red por la directiva de grupo;
- Modificar archivos en masa (ya había experiencia en la resolución de tales problemas, usando Perl);
- Además, use políticas de grupo para actualizar la configuración del cliente.
Recopilar archivos con la directiva de grupo
La parte más simple es que cuando un cliente inicia sesión en su perfil, él con sus derechos ejecuta un cierto archivo .bat, que contiene:
echo off If exist %APPDATA%\RadiantViewer\pacs.xml copy %APPDATA%\RadiantViewer\pacs.xml \\srv.test.local\pconfigs$\pacs-%COMPUTERNAME%-%USERNAME%.xml
Por lo tanto, los archivos pacs.xml se acumularán en el servidor en un recurso oculto, cuyo nombre contiene información de qué computadora y de qué usuario se copió esta configuración.
Lo más difícil fue esperar a que todos los usuarios completaran esta política.
Cambiar configuraciones usando un script Perl
Necesitamos
Active Perl para Windows de ActiveState, así como el módulo XML :: Writer, que puede instalarse utilizando el comando
ppm install XML-Writer .
El guión en sí resultó ser bastante simple:
use XML::Writer;
El principio de su trabajo:
- Abrimos el directorio en el que hemos recopilado las configuraciones de pacs.xml de los clientes y colocamos la lista de archivos en una matriz de escalares (@report_files);
- En un bucle, procesamos un archivo a la vez y lo leemos línea por línea;
- Usando división, divide cada línea en 5 partes, usando comillas como separador;
- Encontramos la línea con la palabra oyente y colocamos dos variables de datos únicos para cada archivo (nombre AE del cliente y número de puerto TCP);
- Después de eso, simplemente creamos un nuevo archivo XML, ingresamos parámetros únicos en él y luego insertamos la cantidad requerida de servidores PACS con sus parámetros, es decir, algo por lo que todo comenzó )
- Vuelva a escribir el nuevo archivo XML sobre el anterior.
Cabe señalar que, de hecho, no uso este script de forma completamente automática; de hecho, copio las configuraciones recopiladas en un directorio separado y luego ejecuto el script y las cambio todas juntas. Luego, una verificación aleatoria, y las configuraciones se pueden volver a colocar en las máquinas.
Distribuir archivos pacs.xml modificados a clientes
Lo más simple que se me ocurrió fue hacer cambios en un archivo .bat que ya funciona y que recopila configuraciones de los clientes y agrega una línea:
If exist %APPDATA%\RadiantViewer\pacs.xml copy /Y \\srv.test.local\pconfigsnew$\pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%\RadiantViewer\pacs.xml
El archivo .bat resultante se ve así:
@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
Conclusión
Tal es la solución "
hasta la
rodilla ". Ya lo probamos dos veces (en septiembre de 2018 y en febrero de 2019), mientras que el vuelo era normal. Por supuesto, no actualiza el 100% de los clientes, pero está cerca de este valor: terminamos el resto de forma remota. Guión por
referencia .