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

时间:2013-06-26 15:35:29

标签: powershell foreach

我有两个数组$ 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获得一个结果。我可以帮助我在上面的代码片段中更改我需要更改的内容吗?

1 个答案:

答案 0 :(得分:3)

我认为问题在于你试图将一个文件中的每个项目与另一个文件中的每个其他项目进行匹配,这样外部循环的每次运行都会产生一个可能的非匹配项。

为什么不这样使用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。

相关问题