解决Get-ADComputer报错:无效枚举上下文及服务器连接问题
解决PowerShell获取AD计算机列表时的"invalid enumeration context"及AD服务器连接错误
问题场景
尝试通过PowerShell脚本导出域内所有计算机列表至CSV时,反复出现invalid enumeration context错误;后续修改脚本并调整执行策略后,又新增了AD服务器无法连接的报错,且AD服务本身并未宕机。
初始脚本:
Get-ADComputer -Filter * -Property * | Select-Object Created,Name,OperatingSystem,ipv4Address,DistinguishedName | Export-CSV test.csv -NoTypeInformation -Encoding UTF8
第一次修改后的脚本(仍报错):
$properties = 'Created','Name','OperatingSystem','OperatingSystemVersion','ipv4Address','DistinguishedName' Get-ADComputer -Filter * -Properties $properties | Export-CSV test.csv -NoTypeInformation -Encoding UTF8
最终修改的脚本(出现双重报错):
Set-ExecutionPolicy -ExecutionPolicy Unrestricted $properties = @( 'Created' 'Name' 'OperatingSystem' 'ipv4Address' 'DistinguishedName' ) Get-ADOrganizationalUnit -Filter * | ForEach-Object { Get-ADComputer -Filter * -Properties $properties -SearchBase $_.DistinguishedName } | Select-Object $properties | Export-CSV test.csv NoTypeInformation -Encoding UTF8
报错信息:
Get-ADComputer : Unable to contact the server. This may be because this server does not exist, it is currently down, or it does not have the Active Directory Web Services running. At \\nasinfrastructure.wakefern.com\Infrastructure\Security\Powershell\Susan_Scripts\AD_User_PCs\Get-ADComputer_4All.ps1:12 char:5 + Get-ADComputer -Filter * -Properties $properties -SearchBase $_.D ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ResourceUnavailable: (:) [Get-ADComputer], ADServerDownException + FullyQualifiedErrorId : ActiveDirectoryServer:0,Microsoft.ActiveDirectory.Management.Commands.GetADComputer Get-ADComputer : The server has returned the following error: invalid enumeration context. At \\nasinfrastructure.wakefern.com\Infrastructure\Security\Powershell\Susan_Scripts\AD_User_PCs\Get-ADComputer_4All.ps1:12 char:5 + Get-ADComputer -Filter * -Properties $properties -SearchBase $_.D ...
错误原因分析
- invalid enumeration context:该错误本质是Active Directory Web Services (ADWS) 的枚举上下文资源耗尽——当一次查询返回的AD对象数量过多,或者连续高频查询时,ADWS无法维持枚举会话,就会抛出此错误。
- AD服务器连接错误:循环遍历OU时,PowerShell会自动选择不同的域控制器,频繁切换连接可能导致ADWS连接不稳定;同时脚本中
Export-CSV参数有误(NoTypeInformation前缺少短横-),可能引发额外的执行异常。 - 执行策略调整与当前问题无关,Unrestricted设置无法解决AD查询层面的错误。
解决方案
1. 修复脚本参数错误
首先修正Export-CSV的参数,确保-NoTypeInformation格式正确:
Export-CSV "test.csv" -NoTypeInformation -Encoding UTF8
2. 优化AD查询逻辑,避免枚举上下文溢出
通过指定域控制器、限制单次查询数量、添加查询延迟来减轻AD服务器负载:
# 按需设置执行策略(可选,需管理员权限) Set-ExecutionPolicy -ExecutionPolicy Unrestricted -Force # 定义需要查询的属性 $properties = @( 'Created', 'Name', 'OperatingSystem', 'ipv4Address', 'DistinguishedName' ) # 指定可靠的域控制器,避免随机切换连接 $domainController = "your-domain-controller.wakefern.com" # 遍历所有OU,分批查询计算机对象 Get-ADOrganizationalUnit -Filter * -Server $domainController | ForEach-Object { # 限制单次查询返回的对象数量,避免枚举上下文耗尽 Get-ADComputer -Filter * -Properties $properties ` -SearchBase $_.DistinguishedName ` -Server $domainController ` -ResultSetSize 100 # 添加短暂延迟,降低AD服务器连续查询的负载 Start-Sleep -Milliseconds 500 } | Select-Object $properties | Export-CSV "test.csv" -NoTypeInformation -Encoding UTF8
3. 额外排查点
- 确认目标域控制器的**Active Directory Web Services (ADWS)**服务处于运行状态;
- 确保执行脚本的账号拥有读取AD计算机对象属性的权限;
- 若域内计算机数量极大,可进一步缩小查询范围(例如按OU分组导出),或使用LDAP查询提升效率。
内容的提问来源于stack exchange,提问作者noobCoder
相关产品推荐
相关产品推荐

