我前几天发布了这个问题
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 个帐户。最重要的是,您正在拉取这些用户的所有属性。那里有一丝疯狂。

虽然我不太清楚你的错误意味着什么,但我知道每个得到它的人都会返回很多用户,而你显然是。缓解这种情况的第一步是使用 -ResultPageSizeGet-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/

10-11 08:44