Powershell:脚本不会并行运行

Powershell:脚本不会并行运行

我有以下脚本。当它不并行时,它将毫无问题地运行。但是当我添加-Parallel它时,它会抛出各种错误。主要错误似乎与有关Cannot index into a null array。我使用的是 PS 7.3.3。有什么建议吗?

脚本的非并行部分(脚本的开始)

$fileList=(get-childitem -filter *.tif -recurse | Where-Object {$_.name -match '^[0-9]{3} (B|F) [A-Z]{2} ..K..b [0-9]{2}.*'}).Name
$fileNumbers=($fileList.Substring(0,3) | Sort-Object | Get-Unique)

$fileArr=New-Object 'Object[,]' $fileNumbers.length,5

for ($i=0; $i -lt $fileNumbers.length; $i++) {
    $fileArr[$i,0]=$fileNumbers[$i]
    
    $iStr="{0:d3}" -f ($i+1)

    $backFullName=@()
    $backName=@()
    $frontFullName=@()

    $backFullName+=(Get-ChildItem -filter "$iStr B *.tif" -recurse | Sort-Object).FullName
    $frontFullName+=(Get-ChildItem -filter "$iStr F CC*.tif" -recurse | Sort-Object).FullName
    $backName+=(Get-ChildItem -filter "$iStr B*.tif" -recurse | Sort-Object).Name
    $frontName+=(Get-ChildItem -filter "$iStr F CC*.tif" -recurse | Sort-Object).Name


    if ($backName[0] -eq $null) {
        $backLabel=$null
    }
    else {
        $backLabel=("BRP "+$backName[0].Substring(16,2)+" "+$istr)
    }

    if ($frontName[0] -eq $null) {
        $frontLabel=$null
    }
    else {
        $frontLabel=("BRP "+$frontName[0].Substring(16,2)+" "+$istr)
    }

    $fileArr[$i,1]=$backFullName[0]
    $fileArr[$i,2]=$frontFullName[0]
    $fileArr[$i,3]=$backLabel
    $fileArr[$i,4]=$frontLabel
}

脚本的并行部分(脚本的后半部分)

    0..($fileNumbers.length-1) | ForEach-Object -Parallel {
    if ($using::fileArr[$_,3] -eq $null -and $using::fileArr[$_,4] -ne $null) {
        $label=$using::fileArr[$_,4]
    }
    elseif ($using::fileArr[$_,3] -ne $null -and $using::fileArr[$_,4] -eq $null) {
        $label=$using::fileArr[$_,3]        
    }
    else {
        $label=$using::fileArr[$_,3]        
    }

    $locationA=Get-Random

    Convert +append $using::fileArr[$_,2] $using::fileArr[$_,1] x:\$locationA.jpg
    $height=[string](([int](identify -format "%h" x:\$locationA.jpg)+400))
    $width=(identify -format "%w" x:\$locationA.jpg)
    $halfWidth=([int]$width*.4)
    $dimensions=$width+"x"+$height

    $locationB=Get-Random

    convert x:\$locationA.jpg -gravity north -extent $dimensions x:\$locationB.jpg

    $str="text $halfWidth,50 '$label'"

    convert  x:\$locationB.jpg -pointsize 300  -gravity southwest -draw "$str" x:\$label.jpg
    Remove-Item x:\$locationA.jpg
    Remove-Item x:\$locationB.jpg

} -ThrottleLimit 12

相关内容