Manova ny firafitry ny programa raha mitahiry ny masontsivana manokana

prehistory

Fikambanana ara-pitsaboana iray no nametraka vahaolana mifototra amin'ny mpizara Orthanc PACS sy mpanjifa Radiant DICOM. Nandritra ny fanamboarana dia hitanay fa ny mpanjifa DICOM tsirairay dia tsy maintsy faritana amin'ny mpizara PACS toy izao manaraka izao:

  • Anaran'ny mpanjifa
  • Anarana AE (tsy maintsy miavaka)
  • Seranan-tseranana TCP izay misokatra ho azy amin'ny lafiny mpanjifa ary mandray ny fanadihadiana DICOM avy amin'ny mpizara PACS (izany hoe, ny mpizara dia manosika azy ireo mankany amin'ny mpanjifa - manomboka ny fifandraisana aloha)
  • Adiresy IP

Taorian'ny nananganana an'i Radiant, dia nahazo ireto sakafo manaraka ireto ho eritreretina ny mpanjifa: ho an'ny mpanjifa tsirairay, ny fametrahana ny rindrambaiko miaraka amin'ireo mari-pamantarana etsy ambony dia nahatonga ny rakitra feno. pacs.xml, izay hita ao amin'ny mombamomba ny mpampiasa (lalana: %APPDATA%RadiantViewerpacs.xml). Mandritra izany fotoana izany, ny config an'ny mpanjifa iray dia tsy mitovy amin'ny iray hafa amin'ny paramètre roa farafahakeliny (ny anaran'ny AE dia hafa ho an'ny rehetra, ary ny seranan-tsambo dia mitovy amin'ny ankapobeny, afa-tsy ho an'ny mpanjifa terminal mandeha amin'ny server iray ihany - misy koa ny seranana. ho samy hafa).

Ohatra fisie pacs.xml amin'ny rohy:

Nandritra ny enim-bolana teo ho eo dia nilamina ny zava-drehetra, nanomboka niasa ny rafitra... ary tonga taminay izany ”anaty rano ny vato"

  • Mila mampiasa lohamilina PACS vaovao maromaro isika izay hisolo ny taloha (izay manomboka lany ny habaka kapila). Mpizara PACS amin'ny milina virtoaly, saingy tsy izany no resahinay;
  • Ilaintsika ny manova ny rafitra tsy manam-paharoa (miaraka amin'ny mari-pamantarana roa samihafa) amin'ny milina 200 (nitombo tsy tapaka ny isan'izy ireo);
  • Raha jerena ny tahan'ny fitomboan'ny volan'ny fanadihadiana dia ilaina ny vahaolana tsy indray mandeha, fa averina indray ary tsy tapaka (ohatra, indray mandeha isaky ny 1-3 volana).

Ny vahaolana dia eto ambany.

Misafidiana fitaovana hamahana olana

Tamin'ny voalohany, nisy ny fikasana hitady vahaolana mety hanovana ny rakitra pacs.xml eo amin'ny lafiny mpanjifa ary hanova ny lisitry ny mpizara PACS tsy misy fiantraikany amin'ny anarana AE sy ny fikandrana port TCP. Ny mpanjifa Windows tamin'izany fotoana izany dia samy nifototra tamin'ny Windows XP sy Windows 7 - noho izany dia nisy ny fikasana hanoratra zavatra toy izany mifototra amin'ny VBScript. Saingy indrisy, tsy azo atao ny mifehy ny asa toy izany, noho ny tsy fahampian'ny traikefa amin'ny fanoratana zavatra sarotra sy feno amin'ity fiteny ity. Tsy nahomby ihany koa ny fiezahana hitady sy hanoratra (marihina fa efa nanana drafitra hafa tao an-dohako aho, ka tsy nibitsibitsika tamin'ny VBScript nandritra ny 3-4 ora mahery).

Tamin'ny farany dia nanorim-ponenana tamin'ny vahaolana manaraka aho:

  • Amin'ny fampiasana ny politikan'ny vondrona, manangona ny rakitra pacs.xml rehetra amin'ny toerana iray amin'ny lohamilina amin'ny loharanon-tambajotra;
  • Ovay ny rakitra en masse (efa nanana traikefa aho tamin'ny famahana olana toy izany tamin'ny fampiasana Perl);
  • Ampiasao koa ny politikan'ny vondrona hanavaozana ny firafitry ny mpanjifa.

Manangona rakitra mampiasa Group Policy

Ny ampahany tsotra indrindra dia ny hoe rehefa miditra ao amin'ny mombamomba azy ny mpanjifa iray dia manatanteraka rakitra .bat iray izy miaraka amin'ny zony, izay milaza hoe:

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

Noho izany, ny rakitra pacs.xml dia hiangona ao amin'ny lohamilina amin'ny loharano miafina, ny anarany dia misy fampahalalana avy amin'ny solosaina sy avy amin'ny mpampiasa nandika an'io config io.

Ny zavatra sarotra indrindra dia ny niandry mandra-pahombiazan'ity politika ity ho an'ny mpampiasa rehetra.

Manova ny configurations mampiasa script Perl

Mila izany isika Active Perl ho an'ny Windows avy amin'ny ActiveState, ary koa ny XML::Writer module, izay azo apetraka amin'ny alalan'ny baiko ppm mametraka XML-Writer.

Ny script mihitsy dia nivadika ho tsotra be:

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

Ny fitsipiky ny asa:

  • Sokafy ny lahatahiry izay nanangonay ny configs pacs.xml avy amin'ny mpanjifa ary mametraka ny lisitry ny rakitra ao anaty scalars maromaro (@report_files);
  • Amin'ny tadio iray dia manodina rakitra iray isaky ny mandeha isika ary mamaky azy an-tsipika;
  • Amin'ny fampiasana fizarazarana, nozarainay ny andalana tsirairay ho fizarana 5, amin'ny fampiasana teny nalaina ho toy ny fisarahana;
  • Mahita tsipika misy ny teny mpihaino izahay ary mametraka angon-drakitra manokana ho an'ny rakitra tsirairay (anaran'ny mpanjifa AE sy nomeraon'ny seranan-tsambo TCP) ho fari-pahalalana roa;
  • Aorian'izany dia mamorona rakitra XML vaovao fotsiny izahay, ampidiro ao anatin'izany ny paramΓ¨tre tsy manam-paharoa ary ampidiro ny isan'ny mpizara PACS ilaina miaraka amin'ny masontsivana azy - ireo. inona no nanombohan'izany rehetra izany)
  • Averinay soratanay eo ambonin'ilay taloha ilay rakitra XML vaovao.

Marihina fa raha ny marina dia tsy mampiasa ho azy tanteraka ity script ity aho - raha ny marina, dia mandika ireo config voaangona ao anaty lahatahiry misaraka aho ary avy eo dia mihazakazaka ny script ary manova azy rehetra. Manaraka, fisavana kisendrasendra - ary azo zaraina amin'ny milina ny config.

Mizara ny rakitra pacs.xml novaina amin'ny mpanjifa

Ny zavatra tsotra indrindra tonga tao an-tsaina dia ny fanovana ny rakitra .bat efa miasa izay manangona ny fanamafisana avy amin'ny mpanjifa ary manampy ny tsipika:

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

Toy izao ny rakitra .bat farany:

@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

famaranana

Toy izao izany"lohalika"vahaolana. Efa indroa izahay no nanandrana izany (tamin’ny septambra 2018 sy febroary 2019), hatreto dia ara-dalΓ na ny sidina. Mazava ho azy fa tsy 100% amin'ny mpanjifa no manavao, fa manakaiky an'io sanda io - mamita ny ambiny lavitra izahay. Script nataon'i rohy.

Source: www.habr.com

Add a comment