PowerShell 7で導入されたForeach-Object -parallelちょっと用事があってこんな感じで使おうとしました。
$outervalue = 1,2,3
$array = 10,20
$array | foreach-object -parallel {
for($i = 0; $i -lt $using:outervalue.length;$i++){
write-host $_ * $using:outervalue[$i]
}
}
すると…
ParserError:
Line |
3 | write-host $_ * $using:outervalue[$i]
| ~~
| Expression is not allowed in a Using expression.
こんな式は認められないと怒られました。
原因はここで書かれているのですが、parallel内の式ではオブジェクトが読み取り専用になるために、インデクサを指定するとだめなのだそうです。なので、GetValueを使って参照することになります。
$outervalue = 1,2,3
$array = 10,20
$array | foreach-object -parallel {
for($i = 0; $i -lt $using:outervalue.length;$i++){
write-host $_ * ($using:outervalue).GetValue($i)
}
}
いわれてみればそうだなぁという仕様ですが、結構悩みました。