我将两个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-ADUser
和 Select-Object
中使用它(想法取自此答案(。如果要添加/删除任何属性,它可能很有用。你也可以这样做:
$props = "samAccountName","displayName","mail"
但这仅适用于多个参数,因此我喜欢明确地将其设置为数组(在另一个有用的答案中对此进行了更多介绍(。
Compare-Object -ReferenceObject $res1 -DifferenceObject $res2 -IncludeEqual -ExcludeDifferent