【发布时间】:2015-10-28 18:22:17
【问题描述】:
我在 Active Directory 或 Powershell 方面没有太多专业知识,我需要提取所有用户以及属于 1000 多个安全组的详细信息。
我尝试了几种不同的在线 PS 脚本,但由于数据量大,脚本需要很长时间才能完成(我在脚本运行 3 天后停止了该脚本)
我还尝试使用 SSIS 分解组列表并一次运行 100 个组,但无济于事。
我正在使用以下第一个脚本来拉取组成员和第二个脚本来拉取其余的用户详细信息
附:组和用户是来自多个子域的混合体。
脚本 1:
$groups = Get-Content c:\temp\Groups.txt
foreach($Group in $Groups) {
Get-ADGroupMember -Id $Group | select @{Expression= {$Group};Label="Group Name"},* | Export-CSV c:\temp\GroupsInfo.CSV - NoTypeInformation
}
脚本 2:
$objForest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest()
$DomainList = @($objForest.Domains | Select-Object Name)
$Domains = $DomainList | foreach {$_.Name}
$Users = Import-CSV c:\users\public\users.csv
#Act on each domain
foreach($Domain in ($Domains))
{
Write-Host "Checking $Domain" -fore blue
Foreach($mail in ($Users.mail))
{
Get-ADUser -filter {mail -eq $mail} -Server $domain -properties mail | select mail,employeeID,title,department,name
Export-CSV c:\temp\MemberDetails.CSV -NoTypeInformation
}
}
【问题讨论】:
-
您在哪里运行代码?如果您从远程计算机运行它,请尝试在您的 DC 上运行它。
-
@Cavalli - 我无权访问 DC 服务器,我在运行 windows 企业(而不是 windows 服务器)的工作站上运行它。
-
我遇到了完全相同的问题,我已经通过在我的 DC 上本地运行我的脚本来解决它。您在运行脚本时是否监控过工作站的性能(cpu 使用率、内存...)?
-
如果您熟悉 PowerShell 工作流,这可能是一个不错的选择。如果不是,您可能想尝试将其作为作业运行以拉动组成员,以便您可以一次查询多个组。另外,您是否确保删除重复的用户引用?假设一个用户在您的 1000 个组中的 8 个中,您是尝试提取用户信息 8 次还是只提取一次?
-
另外,脚本 1 为每个组一遍又一遍地覆盖同一个文件,因此您将获得输出的唯一结果是列表中的最后一个组。
标签: powershell ssis active-directory ldap active-directory-group