I am trying to recursively find files in folders, I have gotten the file names into an Array but the Get-ChildItem doesn't find the files. I can replace the $ImageNames variable with an actual string name and it finds them. So I know there is something wrong with the variable, but I can't pinpoint what it is. Here is a snip of the script.
I have tried to break the array into a foreach, but I get the same result with the single string.
Current output of $ImageNames from Write-Output of $imageNames
TEST_###_DPm.X.1.2.840.113681.2886735633.1532516094.5056.994912425400525861.dcm
TEST_###_DPm.X.1.2.840.113681.2886735633.1532516094.5056.996112425422850002.dcm
TEST_###_DPm.X.1.2.840.113681.2886735633.1532516094.5056.997312425470276903.dcm
Updated per advice, but still not working
foreach ($xmlFile in $sumReportArray)
{
$outputDirectory = $patientDir
$subDirPerXML = Split-Path -Path $xmlFile -Leaf -Resolve
$finalDir = $outputDirectory + '\' + $subDirPerXML
[xml]$XmlDocument = Get-Content $xmlFile
New-Item -ItemType Directory -Force -Path $finalDir | Out-Null
$imageNames = $XmlDocument.VOLPARA_SERVER_INTERFACE.VolparaDicomSummaryReport.VolparaInputs.Image | Select-Object -ExpandProperty ImageFileName
Get-ChildItem -LiteralPath $volparaPath -include $imageNames -Recurse | Copy-Item -Destination $finalDir
}
Here is the error I get...
Get-ChildItem : Illegal characters in path. At C:\\Users\\AdamZenner\\OneDrive - Volpara Health Technologies Limited\\1 Volpara\\Production Software\\Script_VolparaServerSearch\\VolparaServerSearch_1.0.ps1:90 char:13 + Get-ChildItem -recurse -Path ($volparaPath) -filter ($ima ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidArgument: (C:\\Program File...araServer\\DATA\\:String) [Get-ChildItem], ArgumentException + FullyQualifiedErrorId : DirArgumentError,Microsoft.PowerShell.Commands.GetChildItemCommand
The output of ... | Select ImageFileName | Out-String
... | Select ImageFileName | Out-String
... | Select ImageFileName | Out-String
contains unnecessary strings. (Header, Separator, etc.)
So you should use Select-Object -ExpandProperty
.
$imageNames = … | Select-Object -ExpandProperty ImageFileName
But in this case it is enough to use dot access.
and if $imageNames
is an array, use -Include
parameter instead of -Filter
parameter.
$imageNames = $XmlDocument.VOLPARA_SERVER_INTERFACE.VolparaDicomSummaryReport.VolparaInputs.Image.ImageFileName
Get-ChildItem -Path $volparaPath -Include $imageNames -Recurse | Copy-Item -Destination $finalDir
Simply remove the parenthesis () from all your variables and it should work.
New-Item -ItemType Directory -Force -Path ($finalDir)
to
New-Item -ItemType Directory -Force -Path $finalDir
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.