#!PowerShell ... jeje ... this doesn't work on widows ;-)
Tuesday, July 4, 2023
Indexing DICOM files in a directory into a CSV file using PowerShell and MODALIZER-SDK
#!PowerShell ... jeje ... this doesn't work on widows ;-)
Monday, January 18, 2021
Move all studies of patients with ID in CSV file from PACS-A to PACS-B
OK, so here's another PowerShell DICOM script that came handy recently. So my friend, lets call him Benny, got a request from his manager to export all the studies of patients in a list provided as excel sheet and deliver them to a research group (after de-identification and everything of course) but when he called me he just needed to get them out quickly from the PACS. The list was long and there was no chance to do this one by one. So we wrote together this little PowerShell script that reads the patient id's from the excel (after saving it as csv) and use MODALIZER-SDK to do the DICOM work. here it is. I think it explains itself pretty well. We've set the destination PACS-B to be our lightweight PACS server with no plugin so the DICOM files were saved on the disk and from there he picked them up.
$my_ae_title="MY-AE-TITLE"
$pacs_a_ae_title="PACS-A"
$pacs_a_ip_address="10.0.0.10"
$pacs_a_dicom_port=104
$pacs_b_ae_title="PACS-B"
function MoveStudyByPatientID {
param($pat)
$r = New-Object -ComObject rzdcx.DCXREQ
# Lets echo to be sure
$r.Echo($my_ae_title, $pacs_a_ae_title, $pacs_a_ip_address, $pacs_a_dicom_port)
$o = New-Object -ComObject rzdcx.DCXOBJ
$e = New-Object -ComObject rzdcx.DCXELM
# Query Level - STUDY
$e.Init(0x00080052)
$e.Value = "STUDY"
$o.insertElement($e)
# Patient ID
$e.Init(0x00100020)
$e.Value = $pat
$o.insertElement($e)
# Study Instance UID
$e.Init(0x0020000d)
$e.Value = ""
$o.insertElement($e)
$i = $r.Query($my_ae_title, $pacs_a_ae_title, $pacs_a_ip_address, $pacs_a_dicom_port, "1.2.840.10008.5.1.4.1.2.1.1", $o)
if ($i.AtEnd()) {
"No Studies for patient id: " + $pat
}
else
{
while ($i.AtEnd() -ne $true)
{
$res = $i.Get()
"LOG: Study Instance UID: " + $res.GetElement(0x0020000d).Value
$o.insertElement($res.GetElement(0x0020000d))
$r.Move($my_ae_title, $pacs_a_ae_title, $pacs_a_ip_address, $pacs_a_dicom_port, 104, $pacs_b_ae_title, $o)
$i.Next();
}
}
}
# A log never hurts
$a = New-Object -ComObject rzdcx.DCXAPP
$a.StartLogging("log.log")
$a.LogLevel = 5
$patients = Import-Csv -Path .\patients.csv
foreach ($pat in $patients.patient_id)
{
"LOG: Patient ID: " + $pat
MoveStudyByPatientID $pat
}
$a.StopLogging()
# That's it for now
Thursday, August 27, 2020
Sending DICOM files indexed in a DICOMDIR on a DICOM CD to PACS using PowerShell and MODALIZER-SDK
I'm posting this PowerShell script in response to a question I got about sending DICOM files on a CD to PACS.
This functionality is available in MODALIZER+ from the View menu simply by right clicking the Study item at the top study panel and selecting "Send to". The PACS AE title has to be configured first in the settings.
But, for the automation enthusiasts, here's a PowerShell script that do the same. Recalling on DICOMDIR, a DICOM CD or DVD has a file called DICOMDIR in the root path that references all DICOM files on the media. This script iterates through the DICOMDIR records to collect all referenced files, then it send them using DCXREQ.Send command to the PACS.
Here it is. Enjoy!
# Send DICOMDIR Patients to PACS
param($rootFolder);
Wednesday, May 8, 2019
More PowerShell DICOM
Tuesday, January 15, 2019
PowerShell DICOM Scripting
Assumption: you know your way around PowerShell or how to get there and a bit of DICOM and our RZDCX API.
If your system is x64 (probably) than make sure to regsvr32 radix.dll the x64 version.
Let's PowerShell!!!
# download rzdcx
Invoke-WebRequest -Uri http://downloads.roniza.com/rzdcx/2.0.8.7/RZDCX_2087.zip -OutFile ./rzdcx.zip
# unzip it
Expand-Archive ./rzdcx.zip -DestinationPath ./rzdcx
# regsvr32 win32 version
$rzdcx32 = Resolve-Path .\rzdcx\win32\rzdcx.dll
Start-Process regsvr32 -verb runAs -argumentlist $rzdcx32
$rzdcx64 = Resolve-Path .\rzdcx\x64\rzdcx.dll
Start-Process regsvr32 -verb runAs -argumentlist $rzdcx64
# Create DICOM Object
$DCM = New-Object -com rzdcx.DCXOBJ
# I assume you have a directory called DICOM with DICOM files in it
$files = @(Get-ChildItem ".\DICOM\*")
# Write headers
"filename, Patient Name, Patient ID"
# For each file extract and print patient name and patient id
foreach ($file in $files) {
$DCM.openFile($file)
$patname = $DCM.GetElement([int32]::Parse(00100010,'HexNumber')).Value
$patid = $DCM.GetElement([int32]::Parse(00100020,'HexNumber')).Value
Write-Host $file "," $patname "," $patid
}
Try it!