Ngarobah setélan program bari nyimpen parameter pribadi

prasajarah

Hiji organisasi médis ngalaksanakeun solusi dumasar kana server Orthanc PACS sareng klien Radiant DICOM. Salila pangaturan, urang mendakan yén unggal klien DICOM kedah dijelaskeun dina server PACS sapertos kieu:

  • Ngaran klien
  • Ngaran AE (kudu unik)
  • Port TCP anu otomatis dibuka dina sisi klien sareng nampi survey DICOM tina server PACS (nyaéta, server ngadorong aranjeunna ka klien - ngamimitian sambungan heula)
  • Alamat IP

Saatos nyetél Radiant, klien nampi tuangeun di handap ieu pikeun dipikiran: pikeun unggal klien, nyetél parangkat lunak kalayan parameter di luhur nyababkeun file dieusi. pacs.xml, anu aya dina profil pangguna (jalur: %APPDATA%RadiantViewerpacs.xml). Dina waktos anu sami, konfigurasi hiji klien béda ti anu sanés dina sahenteuna dua parameter (nami AE béda pikeun sadayana, sareng port dasarna sami, kecuali klien terminal anu ngajalankeun dina server anu sami - aya palabuhan ogé ngagaduhan. ditugaskeun béda).

Conto file pacs.xml ku link:

Sakitar genep bulan sadayana henteu kunanaon, sistemna mimiti jalan... teras sumping ka kami "jero cai batu»:

  • Urang kudu nempatkeun kana operasi sababaraha server PACS anyar nu bakal ngaganti nu heubeul (dimana spasi disk geus mimiti ngajalankeun kaluar). server PACS dina mesin virtual, tapi teu naon urang ngawangkong ngeunaan;
  • Urang kudu kumaha bae sentral ngarobah konfigurasi unik (kalawan dua parameter béda) pa 200 mesin (jumlah maranéhanana ieu rutin ngaronjatkeun);
  • Mertimbangkeun laju pertumbuhan volume survey, solusi diperlukeun henteu ngan sakali, tapi replicated tur rutin (contona, sakali unggal 1-3 bulan).

Solusina aya di handap.

Milih alat pikeun ngajawab masalah

Mimitina, aya usaha pikeun manggihan sababaraha solusi anu bakal ngaropea file pacs.xml di sisi klien tur jieun perobahan kana daptar server PACS tanpa mangaruhan ngaran AE sarta setélan port TCP. Klién Windows dina waktos éta dumasar kana Windows XP sareng Windows 7 - janten aya usaha pikeun nyerat sapertos kieu dumasar kana VBScript. Tapi hanjakalna, ieu teu mungkin pikeun ngawasaan tugas saperti, alatan kurangna lengkep pangalaman dina nulis nanaon kompléks jeung komprehensif dina basa ieu. Usaha pikeun milarian sareng nyerat deui ogé henteu hasil (peryogi dicatet yén kuring parantos ngagaduhan rencana anu béda dina sirah kuring, janten kuring henteu rebab sareng VBScript langkung ti 3-4 jam).

Tungtungna kuring netepkeun solusi ieu:

  • Nganggo kawijakan grup, kumpulkeun sadaya file pacs.xml dina hiji tempat dina server mana waé dina sumber jaringan;
  • Robah file en masse (Kuring geus kungsi pangalaman dina ngarengsekeun masalah sapertos ngagunakeun Perl);
  • Anggo ogé kawijakan grup pikeun ngapdet setélan klien.

Ngumpulkeun file nganggo Kawijakan Grup

Bagian pangbasajanna nyaéta nalika klien asup kana profilna, anjeunna, kalayan hak-hakna, ngalaksanakeun file .bat anu tangtu, anu nyatakeun:

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

Ku kituna, file pacs.xml bakal ngumpulkeun dina server dina sumberdaya disumputkeun, nu ngaranna ngandung émbaran ti mana komputer tur ti nu pamaké config ieu disalin.

Hal anu paling hese nyaéta ngantosan dugi kabijakan ieu tiasa dianggo pikeun sadaya pangguna.

Ngarobah konfigurasi maké Aksara Perl

Urang bakal butuh Perl aktip pikeun Windows ti ActiveState, kitu ogé modul XML :: Writer, nu bisa dipasang maké paréntah ppm masang XML-Writer.

Skrip sorangan tétéla cukup basajan:

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

Prinsip operasi na:

  • Urang muka diréktori nu urang geus dikumpulkeun pacs.xml konfigurasi ti klien tur nempatkeun daptar file dina Asép Sunandar Sunarya ti skalar (@report_files);
  • Dina loop a, urang ngolah hiji file dina hiji waktu jeung maca eta baris demi baris;
  • Ngagunakeun pamisah, urang dibeulah unggal garis kana 5 bagian, ngagunakeun tanda petik salaku separator a;
  • Urang manggihan garis kalawan kecap pangdéngé sarta nempatkeun data unik pikeun tiap file (AE ngaran klien tur nomer port TCP) kana dua variabel;
  • Saatos ieu, urang ngan ukur ngahasilkeun file XML énggal, lebetkeun parameter unik kana éta teras selapkeun jumlah server PACS anu diperyogikeun sareng parameterna - jelema. naon eta sadayana dimimitian pikeun)
  • Urang nulis ulang file XML anyar dina luhureun hiji heubeul.

Ieu kudu dicatet yén dina kanyataanana, kuring teu make Aksara ieu sagemblengna otomatis - kanyataanna, abdi nyalin configs dikumpulkeun kana diréktori misah lajeng ngajalankeun naskah sarta ngarobah éta sakabéh en masse. Salajengna, dipariksa acak - sarta configs bisa disebarkeun deui ka mesin.

Ngadistribusikaeun file pacs.xml dirobah ka klien

Hal pangbasajanna nu datang ka pikiran éta nyieun parobahan kana file .bat geus bisa dipake nu ngumpulkeun konfigurasi ti klien tur nambahkeun garis:

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

File .bat ahir sapertos kieu:

@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

kacindekan

Ieu kawas kieu"tuur"solusi. Kami parantos nyobian dua kali (dina Séptémber 2018 sareng Pébruari 2019), dugi ka ayeuna penerbanganna normal. Tangtosna, teu 100% tina klien ngamutahirkeun, tapi caket kana nilai ieu - urang ngalengkepan sésana jarak jauh. Naskah ku link.

sumber: www.habr.com

Tambahkeun komentar