Pag-usab sa mga setting sa programa samtang nagtipig sa personal nga mga parameter

sa naunang kasaysayan

Usa ka medikal nga organisasyon ang nagpatuman ug mga solusyon base sa Orthanc PACS server ug Radiant DICOM nga kliyente. Atol sa pag-setup, among nahibal-an nga ang matag kliyente sa DICOM kinahanglan nga gihulagway sa mga server sa PACS ingon sa mosunod:

  • Ngalan sa kliyente
  • AE ngalan (kinahanglan nga talagsaon)
  • Usa ka TCP port nga awtomatik nga nag-abli sa bahin sa kliyente ug nakadawat sa DICOM nga mga survey gikan sa PACS server (ie, ang server nagduso kanila ngadto sa kliyente - nag-una sa koneksyon)
  • IP address

Human sa pag-set up sa Radiant, ang mga kliyente nakadawat sa mosunod nga pagkaon alang sa paghunahuna: alang sa matag kliyente, ang pag-set up sa software uban sa mga parameter sa ibabaw miresulta sa file nga napuno. pacs.xml, nga nahimutang sa user profile (dalan: %APPDATA%RadiantViewerpacs.xml). Sa parehas nga oras, ang config sa usa ka kliyente lahi sa lain sa labing menos duha ka mga parameter (ang ngalan sa AE lahi alang sa tanan, ug ang pantalan parehas ra, gawas sa mga kliyente sa terminal nga nagdagan sa parehas nga server - didto ang mga pantalan usab adunay nga itudlo nga lahi).

Pananglitan pacs.xml file pinaagi sa link:

Sulod sa mga unom ka bulan ang tanan maayo, ang sistema nagsugod sa pagtrabaho ... ug unya kini miabut kanamo "ilalom sa tubig ang mga batoΒ»:

  • Kinahanglan namon nga ibutang sa operasyon ang daghang bag-ong mga server sa PACS nga mopuli sa mga daan (diin ang espasyo sa disk nagsugod na nga mahurot). Mga server sa PACS sa mga virtual machine, apan dili kana ang among gihisgutan;
  • Kinahanglan namon nga usbon sa sentral nga paagi ang talagsaon nga mga pag-configure (nga adunay duha nga lainlaing mga parameter) sa 200 nga mga makina (kanunay nga nagdaghan ang ilang gidaghanon);
  • Sa pagkonsiderar sa rate sa pagtubo sa mga volume sa survey, gikinahanglan ang solusyon dili lang kausa, apan gisubli ug kanunay (pananglitan, kausa matag 1-3 ka bulan).

Ang solusyon anaa sa ubos.

Pagpili sa mga himan aron masulbad ang usa ka problema

Sa sinugdan, adunay mga pagsulay sa pagpangita sa pipila ka solusyon nga magbag-o sa pacs.xml file sa kilid sa kliyente ug maghimo og mga pagbag-o sa listahan sa mga PACS server nga dili makaapekto sa AE name ug TCP port settings. Ang mga kliyente sa Windows niadtong panahona gibase sa Windows XP ug Windows 7 - busa adunay mga pagsulay sa pagsulat sa usa ka butang nga sama niini base sa VBScript. Apan alaot, dili posible nga ma-master ang ingon nga buluhaton, tungod sa hingpit nga kakulang sa kasinatian sa pagsulat sa bisan unsang komplikado ug komprehensibo sa kini nga sinultian. Ang mga pagsulay sa pagpangita ug pagsulat pag-usab wala usab molampos (kini kinahanglan nga matikdan nga naa na koy laing plano sa akong ulo, mao nga wala ko magbiyot sa VBScript sulod sa kapin sa 3-4 ka oras).

Sa katapusan nakahukom ko sa mosunod nga solusyon:

  • Gamit ang polisiya sa grupo, kolektaha ang tanang pacs.xml nga mga file sa usa ka dapit sa bisan unsang server sa usa ka kapanguhaan sa network;
  • Pag-ilis sa mga file en masse (Naa na koy kasinatian sa pagsulbad sa maong mga problema gamit ang Perl);
  • Gamita usab ang mga polisiya sa grupo aron ma-update ang mga setting sa kliyente.

Pagkolekta sa mga file gamit ang Group Policy

Ang pinakasimple nga bahin mao nga kung ang usa ka kliyente mag-log in sa iyang profile, siya, uban sa iyang mga katungod, magpatuman sa usa ka .bat file, nga nag-ingon:

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

Sa ingon, ang mga pacs.xml nga mga file mag-ipon sa server sa usa ka tinago nga kapanguhaan, ang ngalan nga adunay sulud nga kasayuran gikan sa kung diin nga kompyuter ug diin gikan ang tiggamit niini nga config gikopya.

Ang labing lisud nga butang mao ang paghulat hangtod nga kini nga palisiya molihok alang sa tanan nga tiggamit.

Pag-usab sa mga pag-configure gamit ang Perl script

Kinahanglan naton Aktibo nga Perl para sa Windows gikan sa ActiveState, ingon man ang XML::Writer module, nga mahimong i-install gamit ang command ppm i-install ang XML-Writer.

Ang script mismo nahimo nga yano ra:

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);				
			}
	}
 
}

Ang prinsipyo sa operasyon niini:

  • Among giablihan ang direktoryo diin among gikolekta ang mga pacs.xml nga mga configuration gikan sa mga kliyente ug gibutang ang listahan sa mga file sa usa ka han-ay sa mga scalars (@report_files);
  • Sa usa ka loop, among giproseso ang usa ka file sa usa ka higayon ug gibasa kini linya sa linya;
  • Gamit ang split, gibahin namo ang matag linya sa 5 ka bahin, gamit ang mga kinutlo isip separator;
  • Nakakita mi og linya nga adunay pulong tigpaminaw ug nagbutang og data nga talagsaon alang sa matag file (AE client name ug TCP port number) ngadto sa duha ka variables;
  • Pagkahuman niini, maghimo lang kami usa ka bag-ong XML file, isulud ang talagsaon nga mga parameter niini ug dayon isulud ang gikinahanglan nga gidaghanon sa mga server sa PACS sa ilang mga parameter - mga. kung unsa nagsugod ang tanan)
  • Gisulat namo pag-usab ang bag-ong XML file sa ibabaw sa daan.

Kinahanglan nga matikdan nga sa tinuud, wala nako gigamit kini nga script sa hingpit nga awtomatiko - sa tinuud, gikopya nako ang mga nakolekta nga configs sa usa ka lahi nga direktoryo ug dayon gipadagan ang script ug gibag-o silang tanan. Sunod, usa ka random nga pagsusi - ug ang mga config mahimong ipanghatag balik sa mga makina.

Pag-apod-apod sa giusab nga pacs.xml nga mga file ngadto sa mga kliyente

Ang pinakasimple nga butang nga naa sa hunahuna mao ang paghimo og mga pagbag-o sa nagtrabaho na nga .bat file nga nagkolekta sa mga configuration gikan sa mga kliyente ug nagdugang sa linya:

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

Ang kataposang .bat nga payl sama niini:

@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

konklusyon

Parang ganito na nga"tuhod"solusyon. Kaduha na namo gisulayan (sa September 2018 ug February 2019), so far normal ra ang flight. Siyempre, dili 100% sa mga kliyente ang nag-update, apan kini duol sa kini nga kantidad - gikompleto namon ang nahabilin sa layo. Iskrip ni link.

Source: www.habr.com

Idugang sa usa ka comment