背景知识
在一个医疗机构中,他们基于Orthanc PACS服务器和Radiant的DICOM客户端实施了解决方案。 在安装过程中,我们发现每个DICOM客户端都应在PACS服务器中进行如下描述:
- 客户姓名
- AE名称(必须唯一)
- 一个TCP端口,该端口在客户端自动打开,并从PACS服务器接收DICOM检查(即服务器将它们推向客户端,就像首先启动连接一样)
- IP地址
设置Radiant客户端后,需要考虑以下信息-对于每个客户端,使用上述参数设置软件都会导致填充
pacs.xml文件,该文件位于用户配置文件中(路径:
%APPDATA%\ RadiantViewer \ pacs.xml )。 同时,一个客户端与另一个客户端的配置至少相差两个参数(AE名称对于每个人而言都是不同的,并且端口基本相同,除了在同一服务器上运行的终端客户端-您还必须为端口分配不同的端口)。
链接中的示例pacs.xml文件:
在大约半年的时间里,一切都很好,系统正常工作……然后“
陷阱 ”传到了我们:
- 我们需要将几台新的PACS服务器投入运行,它们将替换旧的(磁盘空间开始用完的)旧服务器。 虚拟机中的PACS服务器,但与此无关。
- 我们需要以某种方式集中更改200台机器(其数量定期增加)上的唯一配置(具有两个不同的参数);
- 考虑到检查量的增长速度,解决方案不是一次性的,而是重复的和定期的(例如,每3-5个月一次)。
解决方案如下。
解决问题的工具的选择
最初,人们试图找到一些解决方案来更改客户端上的pacs.xml文件并更改PACS服务器列表,而无需更改AE名称和TCP端口设置。 当时的Windows客户端都是基于Windows XP和Windows 7的-因此,有人尝试基于VBScript编写类似的东西。 但是,遗憾的是,由于完全缺乏用这种语言编写任何复杂内容的经验,因此不可能克服这样的任务。 查找和重写的尝试也都没有成功(应该注意的是,我脑子里已经有了一个不同的计划,因此我花了超过3-4个小时的时间才去理会VBScript)。
最后,我确定了以下解决方案:
- 通过组策略将所有pacs.xml文件收集在网络共享中任何服务器上的某个位置;
- 批量修改文件(已经有解决此类问题的经验-使用Perl);
- 另外,使用组策略来更新客户端设置。
使用组策略收集文件
最简单的部分是,当客户登录到他的个人资料时,他具有自己的权限运行一个特定的.bat文件,该文件在其中写入:
echo off If exist %APPDATA%\RadiantViewer\pacs.xml copy %APPDATA%\RadiantViewer\pacs.xml \\srv.test.local\pconfigs$\pacs-%COMPUTERNAME%-%USERNAME%.xml
因此,pacs.xml文件将在服务器上的隐藏资源中累积,该文件的名称包含从此计算机和用户复制此配置的信息。
最困难的事情是等待所有用户完成此策略。
使用Perl脚本更改配置
我们需要ActiveState的Windows
Active Perl ,以及XML :: Writer模块,可以使用
ppm install XML-Writer命令
安装它 。
脚本本身非常简单:
use XML::Writer;
其工作原理:
- 我们打开从客户端收集pacs.xml配置的目录,并将文件列表放入标量数组(@report_files);
- 在一个循环中,我们一次处理一个文件并逐行读取;
- 使用split,将每行分成5部分,使用引号作为分隔符;
- 我们找到带有单词listener的行,并为每个文件放入两个变量唯一的数据(客户端AE名称和TCP端口号);
- 之后,我们只需创建一个新的XML文件,在其中输入唯一的参数,然后插入所需数量的PACS服务器及其参数即可, 即 一切都开始的东西 )
- 在旧文件的顶部重写新的XML文件。
应该注意的是,实际上我并没有完全自动使用此脚本-实际上,我将收集的配置复制到单独的目录中,然后运行该脚本并一起更改它们。 然后进行随机检查-并将配置重新注入计算机。
将修改后的pacs.xml文件分发给客户端
对我而言,最简单的事情是对已经工作的.bat文件进行更改,该文件从客户端收集配置并添加一行:
If exist %APPDATA%\RadiantViewer\pacs.xml copy /Y \\srv.test.local\pconfigsnew$\pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%\RadiantViewer\pacs.xml
生成的.bat文件如下所示:
@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
结论
这就是“
膝盖高 ”的解决方案。 我们已经对它进行了两次测试(分别于2018年9月和2019年2月),而飞行却是正常的。 当然,它不会更新100%的客户端,但接近此值-我们将远程完成其余的操作。
引用脚本。