我前几天发布了这个问题
Extract e-mail from grouped objects
$OuUser = @{}
$OuUser = Get-AdUser -Properties * -Filter * -SearchBase "domain"
$Duplicates = $OuUser | Select samaccountname, mail,UserPrincipalName |
Group-Object Mail | Where{$_.Count -gt 1}
$Duplicates | Select Name,Count,@{l='Accounts';e={($_.Group|Select -Expand samaccountname) -join ';'}} |
Export-CSV E:\Damo\Duplicates.csv -NoTypeInfo
该代码在一个域上工作正常,并针对 OU 中的一小组用户对其进行测试。
在我想测试的域上进行测试时,其中有很多用户,此代码失败。 OU 中包含非电子邮件格式的电子邮件地址。它指向 Get-ADUser 的错误。
Get-ADUser : The server has returned the following error: invalid enumeration c
ontext.
At C:\scripts\CountEmailsDup.ps1:4 char:21
+ $OuUser = Get-AdUser <<<< -Properties * -Filter * -SearchBase 'ou=external,o
u=user accounts,dc=bizdir,dc=nzpost,dc=co,dc=nz' -SearchScope OneLevel
+ CategoryInfo : NotSpecified: (:) [Get-ADUser], ADException
+ FullyQualifiedErrorId : The server has returned the following error: inv
alid enumeration context.,Microsoft.ActiveDirectory.Management.Commands.Ge
tADUser
我不明白为什么我会在一个域上出现此错误,而在另一个域上却没有。
最佳答案
您在这里遇到的最大问题是您对 Get-ADUser
提出了很多要求。根据您的评论,您正在吸引超过 900,000 个帐户。最重要的是,您正在拉取这些用户的所有属性。那里有一丝疯狂。
虽然我不太清楚你的错误意味着什么,但我知道每个得到它的人都会返回很多用户,而你显然是。缓解这种情况的第一步是使用 -ResultPageSize
的 Get-ADUser
。您的里程可能会有所不同,但您需要试验要返回的记录数。 500-1000 通常是一个好的开始。
我永远不会使用 -Properties *
除非我为一个用户拉取并想查看所有内容。我强烈怀疑您是否在函数中使用了所有这些属性。为了效率,把自己限制在你需要的东西上。您显然需要指定 Mail
。
由于您基于 mail
属性进行处理,因此另一件事是将结果限制为仅具有填充邮件属性的结果。你可以做一些过滤器,例如“”、“....”(来自 Vesper 的评论)或“@”基于你的评论
对此不确定,我没有样本数据来测试理论,但使用管道也应该有所帮助,而不是保存结果只是为了在管道中使用它们。
Get-AdUser -Properties mail -Filter 'mail -like "*@*"' -SearchBase "domain" -ResultPageSize 1000 |
Group-Object Mail |
Where{$_.Count -gt 1} |
Select Name,Count,@{l='Accounts';e={($_.Group|Select -Expand samaccountname) -join ';'}} |
Export-CSV E:\Damo\Duplicates.csv -NoTypeInfo
关于powershell - Get-ADUser : Invalid enumeration context 出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30880639/