แฌแแแแแกแขแแ แแ
แแ แแแ แกแแแแแแชแแแ แแ แแแแแแแชแแแ แแแแแ แแ แแแแแฌแงแแแขแแแแแแแ 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 แกแแ แแแขแแก แแแแแงแแแแแแ
แฉแแแ แแแญแแ แแแแ
แแแแแ แกแชแแแแ แ แกแแแแแแ แแแ แขแแแ แแฆแแแฉแแแ:
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);
- แแแ แงแฃแแจแ แแแแฃแจแแแแแ แแ แ แคแแแแก แแ แแแแแฎแฃแแแแ แฎแแ-แกแขแ แแฅแแแก;
- แแแงแแคแแก แแแแแงแแแแแแ, แฉแแแ แแงแแคแ แแแแแแฃแ แฎแแแก 5 แแแฌแแแแ, แแ แญแงแแแแแแก แแแแแงแแแแแแ, แ แแแแ แช แแแแงแแคแ;
- แฉแแแ แแแแฃแแแแ แฎแแแก แกแแขแงแแ listener-แแ แแ แแแแแแกแแแ แแแแแชแแแแแก แฃแแแแแแฃแ แ แแแแแแฃแแ แคแแแแแกแแแแก (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