循环访问一组对象属性后,如何访问管道中的其他对象属性

时间:2018-09-13 17:20:56

标签: powershell

假设我正在处理函数中的用户对象列表。

Function DoThings {
   Process { $_.memberof).where{ $_ -match "Team_" }.foreach{ Remove-ADGroupMember $_ $_.samaccountname}
                  }#did things

问题在于,由于foreach循环用于where的输出,因此我将自己的范围缩小到无法访问其余对象属性。

我想遍历对象属性的一个子集,但是我还需要能够访问用户属性中的其他信息以传递给cmdlet(例如用户名)。

到目前为止,我唯一能弄清楚的事情就是将$ _。samaccountname分配给一个临时变量,然后再调用它,但这很不雅致。

有没有更清洁的方法?

1 个答案:

答案 0 :(得分:1)

这可以被认为是更优雅的:

Function DoThings {
    Process {
        ($_.memberof) | 
            Where-Object { $_ -match "Team_" } -PipelineVariable pipevar | 
                ForEach-Object { Remove-ADGroupMember $_ $pipevar.samaccountname}
}#did things

有关PipelineVariable

的更多信息