簡體   English   中英

管道中的ForEach對象不起作用

[英]ForEach-Object in Pipeline Not Working

有人可以向我解釋以下原因的原因

$Users = 'First1 Last1','First2 Last2','First3 Last3'

foreach ($User in $Users)
{
    (Get-ADUser -Filter *).Where{$_.Name -like "*$User*"}
}

但這不是

$Users | % { (Get-ADUser -Filter *).Where{$_.Name -like "*$_*"} }

我覺得這基本上是完全相同的東西,但是第一個命令返回數據,而第二個則不

這是不一樣的,因為.Where{$_.Name -like "*$_*"}使用當前對象變量兩次。 $_.Name Get-ADUser ,它應引用Get-ADUser的當前對象,而在"*$_*"它應引用$Users的當前字符串,但實際上也應引用Get-ADUser的當前對象。

這樣的事情會使兩個語句相同:

$Users | % { $u = $_; (Get-ADUser -Filter *).Where{$_.Name -like "*$u*"} }

在第二個循環中,變量$_開始成為$Users數組的第一個用戶,但被Get-ADUser的輸出覆蓋。

換句話說,在{$_.Name -like "*$_*"}的第二個循環中,您認為*$_*等效於$User而不是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM