如何验证Active Directory林中是否存在电子邮件

时间:2018-03-21 19:06:12

标签: powershell active-directory

我正在编写一个PowerShell脚本,用于验证文件中的电子邮件列表是否对Active Directory林有效。我有一个适用于我的特定域的脚本,但它找不到与公司林中的其他域相关联的电子邮件。

foreach($line in Get-Content C:\path\emails.txt) {
    if(Get-ADUser -Filter "EmailAddress -like '$line'") {
        "$line is valid"
    }
    else {
        "$line is invalid"
    }
}

结果:

account1@domainA.com is valid
account2@domainA.com is valid
account3@domainB.com is invalid

Account3@domainB.com返回无效,因为它是另一个域的一部分,但我希望它返回有效,因为它是公司林的一部分。

3 个答案:

答案 0 :(得分:0)

尝试为其他域指定服务器(域控制器):

$DC = 'DC_name'
foreach($line in Get-Content C:\path\emails.txt) {
    if(Get-ADUser -Filter "mail -like '$line*'" -Server $DC ) {
        "$line is valid"
    }
    else {
        "$line is invalid"
    }
}

答案 1 :(得分:0)

使用Server参数,但指定端口3268,因为这是用于全局编录的端口。全局目录是整个森林的列表。

Get-ADUser -Filter "EmailAddress -like '$line'" -Server domain.com:3268

其中domain.com是您林中任何域的DNS名称。

以下是用于Active Directory的各种端口:

  • 389:LDAP - 仅限单个域(默认情况下,如果您不指定任何内容)
  • 3268:全球目录 - 您的整个森林
  • 636:LDAP over SSL
  • 3269:SSL上的全局目录

答案 2 :(得分:0)

以下解决方案有效。它采用所提出的解决方案的元素并循环通过所有域控制器。我宁愿以某种方式利用Get-ADForest cmdlet来防止指定DC,但这足以解决问题的目的。

foreach($line in Get-Content C:\path\emails.txt) {
        foreach($DC in Get-Content C:\path\DCs.txt){
            if(Get-ADUser -Filter "EmailAddress -like '$line'" -Server $DC) {
                "$line FOUND in $DC"
                Add-Content -Path "C:\path\validemails.txt" -Value "$line : $DC"
                break
            }
            else {
                "$line not found in $DC"
            }
        }
    }