我今天一直在对代码进行故障排除,发现此代码不起作用。我正在使用PowerShell管道发送一组可分辨名称来搜索Active Directory中有管理器的用户。
$managers | Get-ADUser -Filter {manager -eq $_}
但是,如果我使用foreach-object
循环和一个显式变量将命令扩展到本例中,则代码可以正常工作。
$managers | %{$manager = $_; Get-ADUser -Filter {manager -eq $manager}}
源代码的哪个部分强迫用户写出这样的表达式?
我对Get-ADUser
的源代码并不熟悉,但是在使用本机PSCustomObjects时,使用管道的效果与第一个示例中的预期一致。
1条答案
按热度按时间u3r8eeie1#
简短的回答是
-Filter
不接受流水线输入,因此不可能有延迟绑定脚本块。这是有充分理由的,所使用的过滤器需要原样传递给Filter Provider,不能预先评估。作为一个最小的例子,尝试这个函数的
-Filter
参数接受ValueFromPipeline
,然后删除ValueFromPipeline
。