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) } }
いわれてみればそうだなぁという仕様ですが、結構悩みました。