Ngganti setelan program nalika nyimpen parameter pribadi

prasejarah

Siji organisasi medis ngetrapake solusi adhedhasar server Orthanc PACS lan klien Radiant DICOM. Sajrone persiyapan, kita nemokake manawa saben klien DICOM kudu diterangake ing server PACS kaya ing ngisor iki:

  • Jeneng klien
  • Jeneng AE (kudu unik)
  • Port TCP sing otomatis mbukak ing sisih klien lan nampa survey DICOM saka server PACS (yaiku, server nyurung menyang klien - miwiti sambungan dhisik)
  • Alamat IP

Sawise nyiyapake Radiant, klien nampa panganan ing ngisor iki kanggo dipikirake: kanggo saben klien, nyetel piranti lunak kanthi paramèter ing ndhuwur nyebabake file diisi. pacs.xml, sing ana ing profil pangguna (path: %APPDATA%RadiantViewerpacs.xml). Ing wektu sing padha, konfigurasi saka siji klien beda-beda saka liyane ing paling ora rong paramèter (jeneng AE beda kanggo saben wong, lan port iku Sejatine padha, kajaba kanggo klien terminal mlaku ing server padha - ana uga port. ditugasake beda).

Conto file pacs.xml dening link:

Kira-kira nem sasi kabeh apik, sistem kasebut wiwit kerja ...jero banyu watu"

  • We kudu sijine menyang operasi sawetara PACS server anyar sing bakal ngganti lawas (ngendi papan disk wis wiwit entek). server PACS ing mesin virtual, nanging ora apa kita ngomong bab;
  • We kudu piye wae tengah ngganti konfigurasi unik (karo loro paramΓ¨ter beda) ing 200 mesin (jumlah sing ajeg nambah);
  • Ngelingi tingkat pertumbuhan volume survey, solusi dibutuhake ora mung sepisan, nanging ditiru lan rutin (contone, saben 1-3 wulan).

Solusi ing ngisor iki.

Milih alat kanggo ngatasi masalah

Kaping pisanan, ana upaya kanggo nemokake sawetara solusi sing bakal ngowahi file pacs.xml ing sisih klien lan nggawe owahan ing dhaptar server PACS tanpa mengaruhi jeneng AE lan setelan port TCP. Klien Windows nalika iku adhedhasar Windows XP lan Windows 7 - mula ana upaya kanggo nulis kaya iki adhedhasar VBScript. Nanging sayangΓ©, ora bisa nguwasani tugas kasebut, amarga kurang pengalaman nulis apa wae sing rumit lan rumit ing basa iki. Nyoba kanggo nemokake lan nulis ulang uga ora kasil (kudu dicathet yen aku wis duwe rencana sing beda ing sirahku, mula aku ora main VBScript luwih saka 3-4 jam).

Ing pungkasan, aku mutusake solusi ing ngisor iki:

  • Nggunakake kabijakan grup, kumpulake kabeh file pacs.xml ing sak panggonan ing server apa wae ing sumber jaringan;
  • Ngganti file kanthi massal (Aku wis duwe pengalaman kanggo ngrampungake masalah kasebut nggunakake Perl);
  • Uga gunakake kabijakan grup kanggo nganyari setelan klien.

Nglumpukake file nggunakake Kebijakan Grup

Sisih paling gampang yaiku nalika klien mlebu ing profil, dheweke, kanthi hak-hak, nglakokake file .bat tartamtu, sing ujar:

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

Mangkono, file pacs.xml bakal nglumpukake ing server ing sumber sing didhelikake, jeneng sing ngemot informasi saka komputer lan saka pangguna sing disalin konfigurasi iki.

Sing paling angel yaiku ngenteni nganti kabijakan iki bisa digunakake kanggo kabeh pangguna.

Ngganti konfigurasi nggunakake skrip Perl

Kita butuh Perl aktif kanggo Windows saka ActiveState, uga XML :: modul Writer, kang bisa diinstal nggunakake printah ppm nginstal XML-Writer.

Skrip dhewe ternyata cukup prasaja:

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 sawijining:

  • Kita mbukak direktori sing wis diklumpukake konfigurasi pacs.xml saka klien lan nyelehake dhaptar file ing array skalar (@report_files);
  • Ing daur ulang, kita ngolah file siji-sijine lan maca baris kanthi baris;
  • Nggunakake pamisah, kita dibagi saben baris dadi 5 bagean, nggunakake kuotasi minangka pamisah;
  • Kita nemokake baris karo tembung pamireng lan panggonan data unik kanggo saben file (AE jeneng klien lan nomer port TCP) dadi rong variabel;
  • Sawise iki, kita mung nggawe file XML anyar, ketik paramΓ¨ter unik banjur lebokake nomer server PACS sing dibutuhake karo paramΓ¨ter - sing. apa iku kabeh diwiwiti kanggo)
  • Kita nulis ulang file XML anyar ing ndhuwur sing lawas.

Sampeyan kudu nyatet sing ing kasunyatan, aku ora nggunakake script iki rampung kanthi otomatis - nyatane, Aku nyalin configs diklumpukake menyang direktori kapisah lan banjur mbukak script lan ngganti kabeh en masse. Sabanjure, mriksa acak - lan configs bisa mbagekke bali menyang mesin.

Nyebarake file pacs.xml sing diowahi menyang klien

Wangsulan: Bab ingkang paling gampang teka ing atine iku kanggo nggawe owah-owahan ing file .bat wis digunakake sing ngumpulake konfigurasi saka klien lan nambah baris:

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

File .bat pungkasan katon kaya iki:

@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

kesimpulan

Kayane iki"dhengkul" solusi. Kita wis nyoba kaping pindho (ing September 2018 lan Februari 2019), nganti saiki penerbangan kasebut normal. Mesthine, ora 100% nganyari klien, nanging cedhak karo nilai iki - kita ngrampungake liyane saka jarak jauh. Skrip dening link.

Source: www.habr.com

Add a comment