قبل التاريخ
في مؤسسة طبية واحدة ، قاموا بتنفيذ حلول تعتمد على خوادم Orthanc PACS وعملاء DICOM من Radiant. أثناء الإعداد ، اكتشفنا أن كل عميل DICOM يجب أن يوصف في خوادم PACS كما يلي:
- اسم العميل
- اسم AE (يجب أن يكون فريدًا)
- منفذ TCP يفتح تلقائيًا من جانب العميل ويستقبل اختبارات DICOM من خادم PACS (أي يدفعها الخادم نحو العميل ، كما لو كان بدء الاتصال أولاً)
- عنوان 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. لكن للأسف ، لم يكن من الممكن التغلب على هذه المهمة ، بالنظر إلى الافتقار الكامل إلى الخبرة في كتابة أي شيء معقد ومعقد بهذه اللغة. لم تنجح محاولات العثور على وإعادة الكتابة (تجدر الإشارة إلى أن هناك بالفعل خطة مختلفة في رأسي ، لذلك لم أزعج VBScript لأكثر من 3-4 ساعات).
في النهاية ، استقرت على الحل التالي:
- جمع جميع ملفات 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
نحتاج إلى
Active Perl لـ Windows من ActiveState ، بالإضافة إلى وحدة XML :: Writer ، والتي يمكن تثبيتها باستخدام الأمر
ppm install XML-Writer .
البرنامج النصي نفسه تبين أنه بسيط للغاية:
use XML::Writer;
مبدأ عملها:
- نفتح الدليل الذي جمعنا فيه تكوينات pacs.xml من العملاء ونضع قائمة الملفات في مجموعة من المقاييس (report_files) ؛
- في حلقة ، نقوم بمعالجة ملف واحد في وقت واحد وقراءته سطرا سطرا.
- باستخدام الانقسام ، قم بتقسيم كل سطر إلى 5 أجزاء ، باستخدام علامات الاقتباس كفاصل ؛
- نجد السطر مع مستمع الكلمات ونضع في متغيرين بيانات فريدة لكل ملف (اسم العميل 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 وفي فبراير 2019) ، بينما كانت الرحلة عادية. بالطبع ، لا يتم تحديث 100٪ من العملاء ، لكن قريبًا من هذه القيمة - ننهي البقية عن بُعد. النصي حسب
المرجع .