Powershell Get ADUser出错:枚举上下文无效

Powershell Get ADUser出错:枚举上下文无效,powershell,active-directory,Powershell,Active Directory,前几天我发布了这个问题 代码只在一个域上运行,运行良好,针对OU中的一小部分用户进行测试 在我想测试的域上进行测试时,该代码失败,因为域中有很多用户。OU中包含非电子邮件格式的电子邮件地址。它指向为错误获取ADUser Get-ADUser : The server has returned the following error: invalid enumeration c ontext. At C:\scripts\CountEmailsDup.ps1:4 char:21 + $OuUs

前几天我发布了这个问题

代码只在一个域上运行,运行良好,针对OU中的一小部分用户进行测试

在我想测试的域上进行测试时,该代码失败,因为域中有很多用户。OU中包含非电子邮件格式的电子邮件地址。它指向为错误获取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:服务器返回了以下错误:枚举c无效
内容。
在C:\scripts\CountEmailsDup.ps1:4 char:21

+$OuUser=Get AdUser您遇到的最大问题是,您向
Get AdUser
提出了很多要求。根据你的评论,你正在吸引超过900000个帐户。最重要的是,您正在提取这些用户的所有属性。那里有点疯狂

虽然我不完全清楚你的错误意味着什么,但我知道每个得到它的人都返回了很多用户,而你显然是这样。缓解这一问题的第一步是使用
Get ADUser
-ResultPageSize
。您的里程数可能会有所不同,但您需要尝试返回的记录数。500-1000通常是一个好的开始

我永远不会使用
-Properties*
,除非我是为一个用户而拉,并且想看到所有的东西。我强烈怀疑您在函数中使用了所有这些属性。为了提高效率,把自己限制在需要的范围内。您显然需要指定
邮件

由于您是基于
邮件
属性进行处理,另一件事是将您的结果限制为仅具有填充邮件属性的结果。您可以根据您对的评论执行多项筛选操作,例如“”、“…”(来自Vesper的评论)或“@”

有一些带有123和123的电子邮件字段。在他们,所以我将不得不使用长度-燃气轮机3或什么跳过他们

对此不确定,我也没有样本数据来测试理论,但使用管道也应该有帮助,而不是保存结果,以便在管道中使用

Get-AdUser-Properties-mail-Filter'mail-like“*@*”-SearchBase“domain”-ResultPageSize 1000|
组对象邮件|
其中{$\.Count-gt 1}|
选择Name,Count,@{l='Accounts';e={($389;.Group | Select-Expand-samaccountname)-join';'}}}
导出CSV E:\Damo\Duplicates.CSV-NoTypeInfo

您预计有多少用户?一次枚举太多用户可能会发生这种情况。您可以尝试使用
-ResultPageSize 500
Get ADUser
有超过900000个帐户需要处理,我正在尝试只使用具有有效电子邮件地址的帐户,并找到重复的帐户,然后导出到csv。然后我会尝试我的第一条评论,看看是否有帮助。组织中的每个人都有电子邮件地址吗?您可以使用
-Filter
仅获取具有有效电子邮件地址的帐户,以减少您要带回的数据集。从Active Directory获取数据学到了很多东西,这很有意义。非常感谢。我现在正在使用-Filter{mail-like“*”},它应该只给我带有电子邮件地址的帐户。有一些带有123和123的电子邮件字段。在它们中,我将不得不使用长度-gt 3或其他东西来跳过它们。您不仅可以通过
-like“*”
进行筛选,还可以通过
-like“…*”
进行筛选,这应该只会返回那些
邮件
属性长度至少为4个符号的用户。谢谢,这有助于使用@缩小数据范围,并将属性设置为仅邮件,有助于加快处理时间。谢谢。这里还有一些很棒的分析:。从它们的输出来看,一个非常简单的解决方案可能是向
SORT-OBJECT
添加一个管道,因为这将确保在传递之前从管道中提取所有数据/您可以在不添加变量的情况下插入它。
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