繁体   English   中英

Powershell嵌套的Foreach循环给出了错误的结果

[英]Powershell Nested Foreach loop giving incorrect results

我有两个数组$ newUsers和$ oldUsers已经在我编写的脚本中填充了userid's。 我的下一个目标是检查$ oldUsers中的userid是否存在于$ oldUsers中。 如果是,则显示语句Write-Host“在Old user list中找到New User_id $ rowNew”否则显示Write-Host“New User_id $ rowNew Notfound in Old user list”

下面是我使用的逻辑和我得到的输出。

foreach ($rowNew in $newusers){ 
           foreach ($rowOld in $oldusers){
                 if ($rowNew -ieq $rowOld){ 
                      Write-Host "New User_id $rowNew found in Old user list"
                 } else {
                   Write-Host "New User_id $rowNew Notfound in Old user list"   
                 }
            }
        }

- 结果

New User_id fadb274 found in Old user list
New User_id fadb274 Notfound in Old user list
New User_id fadb274 Notfound in Old user list
New User_id fadb274 Notfound in Old user list
New User_id fadb274 Notfound in Old user list
New User_id fadb274 Notfound in Old user list
New User_id fadb274 Notfound in Old user list
New User_id fadb274 Notfound in Old user list
New User_id fad8878 found in Old user list
New User_id fad8878 Notfound in Old user list
New User_id fad8878 Notfound in Old user list
New User_id fad8878 Notfound in Old user list

不知道为什么我得到上述结果,我不应该为每个用户ID得到一个结果。 任何人都可以帮助我在上面的代码片段中需要更改什么?

我认为问题在于你试图将一个文件中的每个项目与另一个文件中的每个其他项目进行匹配,因此外部循环的每次运行都会导致一个可能的和许多非匹配项。

为什么不这样使用Compare-Object:

Compare-Object -ReferenceObject $oldusers -DifferenceObject $newusers -IncludeEqual | % {
  if($_.SideIndicator -eq '==') {$f = 'found'} else {$f = 'NotFound'}
  if($_.SideIndicator -eq '<=') {$a = 'Old'} 
  if($_.SideIndicator -eq '=>') {$a = 'New'}
  "New User_id $($_.InputObject) $f in $a user list"
}

另一种方法是只做一个循环并使用-contains而不是-ieq。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM