ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° настройкитС Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΏΡ€ΠΈ Π·Π°ΠΏΠ°Π·Π²Π°Π½Π΅ Π½Π° Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ

праистория

Π•Π΄Π½Π° мСдицинска организация Π²Π½Π΅Π΄Ρ€ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° Orthanc PACS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ ΠΈ Radiant DICOM ΠΊΠ»ΠΈΠ΅Π½Ρ‚. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° настройката ΠΎΡ‚ΠΊΡ€ΠΈΡ…ΠΌΠ΅, Ρ‡Π΅ всСки DICOM ΠΊΠ»ΠΈΠ΅Π½Ρ‚ трябва Π΄Π° бъдС описан Π² PACS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ слСдва:

  • ИмС Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°
  • AE ΠΈΠΌΠ΅ (трябва Π΄Π° Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΎ)
  • TCP ΠΏΠΎΡ€Ρ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ сС отваря ΠΎΡ‚ страната Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° DICOM Π°Π½ΠΊΠ΅Ρ‚ΠΈ ΠΎΡ‚ PACS ΡΡŠΡ€Π²ΡŠΡ€Π° (Ρ‚.Π΅. ΡΡŠΡ€Π²ΡŠΡ€ΡŠΡ‚ Π³ΠΈ насочва към ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° - ΠΏΡŠΡ€Π²ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€Π° Π²Ρ€ΡŠΠ·ΠΊΠ°Ρ‚Π°)
  • IP адрСс

Π‘Π»Π΅Π΄ настройката Π½Π° Radiant ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ…Π° слСдната Ρ…Ρ€Π°Π½Π° Π·Π° Ρ€Π°Π·ΠΌΠΈΡΡŠΠ»: Π·Π° всСки ΠΊΠ»ΠΈΠ΅Π½Ρ‚ настройката Π½Π° софтуСра с Π³ΠΎΡ€Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ попълванС Π½Π° Ρ„Π°ΠΉΠ»Π° pacs.xml, ΠΊΠΎΠΉΡ‚ΠΎ сС Π½Π°ΠΌΠΈΡ€Π°ΡˆΠ΅ Π² потрСбитСлския ΠΏΡ€ΠΎΡ„ΠΈΠ» (ΠΏΡŠΡ‚: %APPDATA%RadiantViewerpacs.xml). Π’ ΡΡŠΡ‰ΠΎΡ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅ конфигурацията Π½Π° Π΅Π΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ сС Ρ€Π°Π·Π»ΠΈΡ‡Π°Π²Π°ΡˆΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΏΠΎΠ½Π΅ ΠΏΠΎ Π΄Π²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π° (ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° AE Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎ Π·Π° всСки ΠΈ ΠΏΠΎΡ€Ρ‚ΡŠΡ‚ Π΅ ΠΎΠ±Ρ‰ΠΎ Π²Π·Π΅Ρ‚ΠΎ Π΅Π΄ΠΈΠ½ ΠΈ ΡΡŠΡ‰, с ΠΈΠ·ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π½ΠΈΡ‚Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ, Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ΠΈ Π½Π° ΡΡŠΡ‰ΠΈΡ ΡΡŠΡ€Π²ΡŠΡ€ - Ρ‚Π°ΠΌ ΠΏΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ ΠΈΠΌΠ°Ρ…Π° Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ присвоСни Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ Ρ„Π°ΠΉΠ» pacs.xml ΠΎΡ‚ Π²Ρ€ΡŠΠ·ΠΊΠ°:

Около ΡˆΠ΅ΡΡ‚ мСсСца всичко бСшС Π½Π°Ρ€Π΅Π΄, систСмата Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ... ΠΈ Ρ‚ΠΎΠ³Π°Π²Π° Π΄ΠΎΠΉΠ΄Π΅ ΠΏΡ€ΠΈ нас "ΠΏΠΎΠ΄Π²ΠΎΠ΄Π΅Π½ камъни"

  • Врябва Π΄Π° пуснСм Π² Сксплоатация няколко Π½ΠΎΠ²ΠΈ PACS ΡΡŠΡ€Π²ΡŠΡ€Π°, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ замСнят старитС (ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ дисковото пространство Π·Π°ΠΏΠΎΡ‡Π½Π° Π΄Π° ΡΠ²ΡŠΡ€ΡˆΠ²Π°). PACS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ във Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½ΠΈ машини, Π½ΠΎ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° Ρ‚ΠΎΠ²Π°;
  • Врябва ΠΏΠΎ някакъв Π½Π°Ρ‡ΠΈΠ½ Π΄Π° ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈΠΌ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»Π½ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ (с Π΄Π²Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€Π°) Π½Π° 200 машини (броят ΠΈΠΌ Ρ€Π΅Π΄ΠΎΠ²Π½ΠΎ сС ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°ΡˆΠ΅);
  • ΠšΠ°Ρ‚ΠΎ сС ΠΈΠΌΠ° ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ Ρ‚Π΅ΠΌΠΏΡŠΡ‚ Π½Π° нарастванС Π½Π° ΠΎΠ±Π΅ΠΌΠΈΡ‚Π΅ Π½Π° проучванията, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ само вСднъТ, Π° Ρ€Π΅ΠΏΠ»ΠΈΠΊΠΈΡ€Π°Π½ΠΎ ΠΈ Ρ€Π΅Π΄ΠΎΠ²Π½ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ вСднъТ Π½Π° всСки 1-3 мСсСца).

Π Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρƒ.

Π˜Π·Π±ΠΎΡ€ Π½Π° инструмСнти Π·Π° Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ

ΠžΡ‚Π½Π°Ρ‡Π°Π»ΠΎ имашС ΠΎΠΏΠΈΡ‚ΠΈ Π΄Π° сС Π½Π°ΠΌΠ΅Ρ€ΠΈ някакво Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ Π΄Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π° Ρ„Π°ΠΉΠ»Π° pacs.xml ΠΎΡ‚ страна Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² списъка с PACS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ, Π±Π΅Π· Π΄Π° засяга AE ΠΈΠΌΠ΅Ρ‚ΠΎ ΠΈ настройкитС Π½Π° TCP ΠΏΠΎΡ€Ρ‚Π°. ΠšΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ Π½Π° Windows ΠΏΠΎ Ρ‚ΠΎΠ²Π° Π²Ρ€Π΅ΠΌΠ΅ бяха Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ ΠΊΠ°ΠΊΡ‚ΠΎ Π½Π° Windows XP, Ρ‚Π°ΠΊΠ° ΠΈ Π½Π° Windows 7 - Ρ‚Π°ΠΊΠ° Ρ‡Π΅ имашС ΠΎΠΏΠΈΡ‚ΠΈ Π΄Π° сС напишС Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° VBScript. Но ΡƒΠ²ΠΈ, Π½Π΅ бСшС възмоТно Π΄Π° сС справим с Ρ‚Π°ΠΊΠ°Π²Π° Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΏΡŠΠ»Π½Π°Ρ‚Π° липса Π½Π° ΠΎΠΏΠΈΡ‚ Π² писанСто Π½Π° Π½Π΅Ρ‰ΠΎ слоТно ΠΈ ΠΈΠ·Ρ‡Π΅Ρ€ΠΏΠ°Ρ‚Π΅Π»Π½ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ. ΠžΠΏΠΈΡ‚ΠΈΡ‚Π΅ Π·Π° Π½Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΈ прСнаписванС ΡΡŠΡ‰ΠΎ бяха Π½Π΅ΡƒΡΠΏΠ΅ΡˆΠ½ΠΈ (трябва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ ΠΏΠ»Π°Π½ Π² Π³Π»Π°Π²Π°Ρ‚Π° си, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½Π΅ сС Π·Π°Π½ΠΈΠΌΠ°Π²Π°Ρ… с VBScript ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ 3-4 часа).

Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка сС спрях Π½Π° слСдното Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅:

  • Използвайки Π³Ρ€ΡƒΠΏΠΎΠ²Π° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ°, ΡΡŠΠ±ΠΈΡ€Π°ΠΉΡ‚Π΅ всички pacs.xml Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° Π΅Π΄Π½ΠΎ място Π½Π° всСки ΡΡŠΡ€Π²ΡŠΡ€ Π² ΠΌΡ€Π΅ΠΆΠΎΠ² рСсурс;
  • ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ масово (Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ°Ρ… ΠΎΠΏΠΈΡ‚ Π² Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ‚Π°ΠΊΠΈΠ²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Perl);
  • Π˜Π·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΡΡŠΡ‰ΠΎ Π³Ρ€ΡƒΠΏΠΎΠ²ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°, Π·Π° Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ настройкитС Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°.

Π‘ΡŠΠ±ΠΈΡ€Π°Π½Π΅ Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Ρ‡Ρ€Π΅Π· Π³Ρ€ΡƒΠΏΠΎΠ²ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°

Най-простото Π΅, Ρ‡Π΅ ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ Π²Π»Π΅Π·Π΅ Π² ΠΏΡ€ΠΎΡ„ΠΈΠ»Π° си, Ρ‚ΠΎΠΉ с ΠΏΡ€Π°Π²Π°Ρ‚Π° си изпълнява ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ .bat Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠ°Π·Π²Π°:

echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml

Π’Π°ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ pacs.xml Ρ‰Π΅ сС Π½Π°Ρ‚Ρ€ΡƒΠΏΠ²Π°Ρ‚ Π½Π° ΡΡŠΡ€Π²ΡŠΡ€Π° Π² скрит рСсурс, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΈΠΌΠ΅ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° информация ΠΎΡ‚ ΠΊΠΎΠΉ ΠΊΠΎΠΌΠΏΡŽΡ‚ΡŠΡ€ ΠΈ ΠΎΡ‚ ΠΊΠΎΠΉ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» Π΅ ΠΊΠΎΠΏΠΈΡ€Π°Π½Π° Ρ‚Π°Π·ΠΈ конфигурация.

Най-Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ бСшС Π΄Π° ΠΈΠ·Ρ‡Π°ΠΊΠ°ΠΌΠ΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ‚Π°Π·ΠΈ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠ° Π·Π°Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π° всички ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΠΈ.

ΠŸΡ€ΠΎΠΌΡΠ½Π° Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° Perl скрипт

Π©Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° АктивСн Perl Π·Π° Windows ΠΎΡ‚ ActiveState, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π° XML::Writer, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС инсталира Ρ‡Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ppm инсталирайтС XML-Writer.

Бамият скрипт сС ΠΎΠΊΠ°Π·Π° доста прост:

use XML::Writer;
 
# ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ ΠΏΠ°ΠΏΠΊΡƒ с ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ, ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌ ссписок (удаляСм лишнСС):
	$report_dir = "C:Perl64WORKPACS-xml3";
	opendir(DIR, "$report_dir") or die "НС ΠΌΠΎΠ³Ρƒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠ°ΠΏΠΊΡƒ с ΠΎΡ‚Ρ‡Π΅Ρ‚Π°ΠΌΠΈ!";
	@report_files = readdir DIR;
	shift (@report_files); # удаляСм Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΈΠ· элСмСнтов массива (.)
	shift (@report_files); # удаляСм Π΄Π²Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈΠ· элСмСнтов массива (..)
#	print "@report_files";
	closedir(DIR);
 
# НачинаСм ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ - ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π° Ρ€Π°Π·. НуТно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ AET ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΏΠΎΡ€Ρ‚Π° Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅.
foreach $analiz_file (@report_files) 
{
	$full_path_to_file="C:Perl64WORKPACS-xml3".$analiz_file;
	open (INFO, $full_path_to_file);
 
	while ($line = <INFO>)
	{
		# ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ $aet ΠΈ $port содСрТат ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ XML Ρ„Π°ΠΉΠ»Π°:
		my ($other1, $aet, $other2, $port, $other3) = split /"/, $line, 5;
		# Если встрСчаСтся строка listener - Ρ‚ΠΎ ΠΌΡ‹ дошли Π΄ΠΎ Π½ΡƒΠΆΠ½ΠΎΠΉ строчки ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ XML:
		if ($other1 =~ 'listener')
			{
				# Π€ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ XML c Π½ΡƒΠΆΠ½Ρ‹ΠΌΠΈ полями ΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:
				my $writer = XML::Writer->new(OUTPUT => 'self', DATA_MODE => 1, DATA_INDENT => 2, );
				$writer->xmlDecl('utf-8');
				$writer->startTag('pacs');
				$writer->startTag('listener', ae => $aet, port => $port);
				$writer->endTag();
				$writer->startTag('hosts');
				$writer->startTag('host', name => 'MRT', ae => 'ORTHANC', ip => 'XX.YY.214.17', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'KT', ae => 'ORTHANC2', ip => 'XX.YY.215.253', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'R', ae => 'ORTHANC3', ip => 'XX.YY.215.252', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'KT-20180501-20180831', ae => 'ORTHANC4', ip => 'XX.YY.215.251', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->startTag('host', name => 'KT-20180901-20181130', ae => 'ORTHANC5', ip => 'XX.YY.215.250', ts => '1.2.840.10008.1.2.1', port => '4242', maxassoc => '1', allpres => '0', search => '1', protocol => '1', searchcharset => '', wildcards => '3', carets => '0');
				$writer->endTag();
				$writer->endTag('hosts');
				$writer->startTag('presets');
				$writer->endTag();
				$writer->startTag('lastsearch', dt => '4', mfid => '1048592');
				$writer->endTag();
				$writer->endTag('pacs');
 
				# ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ XML Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ:
				my $xml = $writer->end();
				# ΠŸΠΎΠ΄Π³ΠΎΡ‚Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» для пСрСзаписи:
				$rewritexml = $full_path_to_file;
				# ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡΡ‹Π²Π°Π΅ΠΌ XML Ρ„Π°ΠΉΠ»Ρ‹ Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:
				open (NEWXML, ">$rewritexml");
				print NEWXML $xml;
				close (NEWXML);				
			}
	}
 
}

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡŠΡ‚ Π½Π° Π½Π΅Π³ΠΎΠ²ΠΎΡ‚ΠΎ дСйствиС:

  • ΠžΡ‚Π²Π°Ρ€ΡΠΌΠ΅ дирСкторията, Π² която смС ΡΡŠΠ±Ρ€Π°Π»ΠΈ pacs.xml ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ ΠΈ поставямС списъка с Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π² масив ΠΎΡ‚ скалари (@report_files);
  • Π’ Ρ†ΠΈΠΊΡŠΠ» Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ Ρ„Π°ΠΉΠ» навСднъТ ΠΈ Π³ΠΎ Ρ‡Π΅Ρ‚Π΅ΠΌ Ρ€Π΅Π΄ ΠΏΠΎ Ρ€Π΅Π΄;
  • Използвайки split, раздСлямС всСки Ρ€Π΅Π΄ Π½Π° 5 части, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΊΠ°Π²ΠΈΡ‡ΠΊΠΈ ΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»;
  • НамирамС Ρ€Π΅Π΄ с Π΄ΡƒΠΌΠ°Ρ‚Π° ΡΠ»ΡƒΡˆΠ°Ρ‚Π΅Π» ΠΈ поставямС Π΄Π°Π½Π½ΠΈ, ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ Π·Π° всСки Ρ„Π°ΠΉΠ» (ΠΈΠΌΠ΅ Π½Π° AE ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΈ Π½ΠΎΠΌΠ΅Ρ€ Π½Π° TCP ΠΏΠΎΡ€Ρ‚) Π² Π΄Π²Π΅ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ;
  • Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° Π½ΠΈΠ΅ просто Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°ΠΌΠ΅ Π½ΠΎΠ² XML Ρ„Π°ΠΉΠ», въвСТдамС ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π² Π½Π΅Π³ΠΎ ΠΈ слСд Ρ‚ΠΎΠ²Π° вмъквамС нСобходимия Π±Ρ€ΠΎΠΉ PACS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ с Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ - Ρ‚Π΅Π·ΠΈ. Π·Π° ΠΊΠ°ΠΊΠ²ΠΎ Π·Π°ΠΏΠΎΡ‡Π½Π° всичко)
  • ΠŸΡ€Π΅Π½Π°ΠΏΠΈΡΠ²Π°ΠΌΠ΅ новия XML Ρ„Π°ΠΉΠ» Π²ΡŠΡ€Ρ…Ρƒ стария.

Врябва Π΄Π° сС ΠΎΡ‚Π±Π΅Π»Π΅ΠΆΠΈ, Ρ‡Π΅ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π°Π· Π½Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Ρ‚ΠΎΠ·ΠΈ скрипт напълно Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ - Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ ΠΊΠΎΠΏΠΈΡ€Π°ΠΌ ΡΡŠΠ±Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π² ΠΎΡ‚Π΄Π΅Π»Π½Π° дирСктория ΠΈ слСд Ρ‚ΠΎΠ²Π° стартирам скрипта ΠΈ Π³ΠΈ промСням всички масово. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π°, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° - ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π½Π° ΠΌΠ°ΡˆΠΈΠ½ΠΈΡ‚Π΅.

РазпространСниС Π½Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€Π°Π½ΠΈ pacs.xml Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ

Най-простото Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΌΠΈ Ρ…Ρ€ΡƒΠΌΠ½Π°, бСшС Π΄Π° сС направят ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ във Π²Π΅Ρ‡Π΅ работСщия .bat Ρ„Π°ΠΉΠ», ΠΊΠΎΠΉΡ‚ΠΎ ΡΡŠΠ±ΠΈΡ€Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈ ΠΈ Π΄Π° сС Π΄ΠΎΠ±Π°Π²ΠΈ Ρ€Π΅Π΄ΡŠΡ‚:

If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml

ΠšΡ€Π°ΠΉΠ½ΠΈΡΡ‚ .bat Ρ„Π°ΠΉΠ» ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ°:

@echo off
If exist %APPDATA%RadiantViewerpacs.xml copy %APPDATA%RadiantViewerpacs.xml srv.test.localpconfigs$pacs-%COMPUTERNAME%-%USERNAME%.xml
If exist %APPDATA%RadiantViewerpacs.xml copy /Y srv.test.localpconfigsnew$pacs-%COMPUTERNAME%-%USERNAME%.xml %APPDATA%RadiantViewerpacs.xml

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ΠΎΠ²Π° Π΅ ΠΊΠ°Ρ‚ΠΎ Ρ‚ΠΎΠ²Π° "коляно" Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Π’Π΅Ρ‡Π΅ Π³ΠΎ ΠΏΡ€ΠΎΠ±Π²Π°Ρ…ΠΌΠ΅ Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ (ΠΏΡ€Π΅Π· сСптСмври 2018 Π³. ΠΈ Ρ„Π΅Π²Ρ€ΡƒΠ°Ρ€ΠΈ 2019 Π³.), засСга ΠΏΠΎΠ»Π΅Ρ‚ΡŠΡ‚ Π΅ Π½ΠΎΡ€ΠΌΠ°Π»Π΅Π½. Π Π°Π·Π±ΠΈΡ€Π° сС, Π½Π΅ 100% ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΈΡ‚Π΅ обновяват, Π½ΠΎ Π΅ Π±Π»ΠΈΠ·ΠΎ Π΄ΠΎ Ρ‚Π°Π·ΠΈ стойност - останалитС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π°ΠΌΠ΅ дистанционно. Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ ΠΎΡ‚ Π²Ρ€ΡŠΠ·ΠΊΠ°.

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€