如何比较Get-ADUser的结果?

时间:2019-06-14 01:26:20

标签: powershell active-directory

我将两个Get-ADUser查询的结果存储在变量中(它们正在查询两个活动目录)。

比较它们以查找特定属性并如果匹配则导出为CSV的最佳方法是什么?我试图通过嵌套的forEach循环使其工作并与if进行属性比较,但它只是将来自两个AD的所有结果附加到csv。

我目前不在家,到达时我将上传当前代码,但使用伪代码是这样的:

$res1 = get-adUser -filter{enabled -eq $true} -Properties     samAccountName, displayname, mail | select-object samAccountName, displayname, mail
$res2 = get-adUser -server ABC -filter{enabled -eq $true} -Properties samAccountName, displayname, mail | select-object samAccountName, displayname, mail

ForEach($u1 in $res1){
  ForEach($u2 in $res2){
    If($u1.mail -eq $u2.mail){
      Write-host $u1.mail $u2.mail
    }
  }
}

2 个答案:

答案 0 :(得分:0)

Compare-Object -ReferenceObject $res1 -DifferenceObject $res2 -IncludeEqual -ExcludeDifferent

答案 1 :(得分:0)

在导出同一组属性的同时,您可以为此使用Compare-Object

$props = @("samAccountName","displayName","mail")
$res1 = Get-ADUser -filter 'GivenName -eq "Robert"' -properties $props | Select-Object $props
$res2 = Get-ADUser -filter 'GivenName -like "Rob*"' -properties $props | Select-Object $props
$comp = Compare-Object -ReferenceObject $res1 -DifferenceObject $res2 -IncludeEqual -ExcludeDifferent

默认情况下,Compare-Object向您显示对象之间的差异,因此您必须包含相等的对象而排除不同的对象。

如果由于某种原因,您不想比较可以指定-Property参数的所有属性,如下所示:

# In that example you you want compare only displayName and mail
# SamAccountName might be different
$comp = Compare-Object -ReferenceObject $res1 -DifferenceObject $res2 -IncludeEqual -ExcludeDifferent -Property displayName,mail

注意:

您可能已经注意到,我对脚本进行了另一项改进-我将所有属性保存到变量中,然后在Get-ADUserSelect-Object中使用了它(此思想取自this answer )。如果要添加/删除任何属性,则可能会很有用。您也可以这样:

$props = "samAccountName","displayName","mail"

但这仅适用于多个参数,因此我想明确地将其设置为数组(another helpful answer中对此有更多介绍)。