[英]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.