Переменные в вложенном объекте Foreach-Object и Where-Object

Мне интересно, как работать с вложенными Forach-Object, Where-Object и другими командлетами в Powershell. Например, этот код:

$obj1 | Foreach-Object { 
    $obj2 | Where-Object { $_ .... }
}

Итак, в блоке кода Foreach-Object я использую элементы $obj1 как $_. Но то же самое произошло в блоке кода Where-Object с $obj2. Итак, как я могу получить доступ к обоим объектам в блоке кода Where-Object? Мне нужно было бы сделать $_.Arg1 -eq $_.Arg1, но это не имеет смысла.

Ответы

Ответ 1

afaik, вам нужно сохранить ссылку на внешний цикл, поместив его в локальную переменную.

$obj1 | Foreach-Object { 
    $myobj1 = $_
    $obj2 | Where-Object { $_ .... }
}

Ответ 2

Другой способ адресовать это с небольшим разным foreach

ForEach($item in $obj1){
    $obj | Where-Object{$_.arg -eq $item.arg}
}

Все еще сводится к about_Scopes. $_ всегда ссылается на текущую область. Как вы знаете, ($_.Arg1 -eq $_.Arg1) будет просто ссылаться на себя.