嵌套的Foreach-Object和Where-Object中的变量

Mic*_*ael 27 powershell

我想知道如何在Powershell中使用嵌套的Forach-Object,Where-Object和其他Cmdlet.例如这段代码:

$obj1 | Foreach-Object { 
    $obj2 | Where-Object { $_ .... }
}
Run Code Online (Sandbox Code Playgroud)

所以在Foreach-Object的代码块中我使用了$obj1as 的元素$_.但是在Where-Object的代码块中也发生了同样的事情$obj2.那么如何访问Where-Object代码块中的两个对象元素呢?我不得不这样做,$_.Arg1 -eq $_.Arg1但这毫无意义.

Lie*_*ers 35

afaik,你需要通过将它放在一个局部变量中来保持对外循环的引用.

$obj1 | Foreach-Object { 
    $myobj1 = $_
    $obj2 | Where-Object { $_ .... }
}
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 8

解决这个问题的另一种方法是使用稍微不同的foreach

ForEach($item in $obj1){
    $obj | Where-Object{$_.arg -eq $item.arg}
}
Run Code Online (Sandbox Code Playgroud)

仍然归结为about_Scopes.$_始终是对当前范围的引用.正如你必须知道的($_.Arg1 -eq $_.Arg1)那样只会引用自己.