如何比较 Get-ADUser.



我将两个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
    }
  }
}

导出同一组属性时,可以使用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 中使用它(想法取自此答案(。如果要添加/删除任何属性,它可能很有用。你也可以这样做:

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

但这仅适用于多个参数,因此我喜欢明确地将其设置为数组(在另一个有用的答案中对此进行了更多介绍(。

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

最新更新