我正在编写一个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返回无效,因为它是另一个域的一部分,但我希望它返回有效,因为它是公司林的一部分。
答案 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的各种端口:
答案 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"
}
}
}