gpt4 book ai didi

powershell - 使用 Powershell 从多个域的事件目录组中提取所有用户?

转载 作者:行者123 更新时间:2023-12-01 05:00:26 24 4
gpt4 key购买 nike

我在 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
}
}

最佳答案

所以我不知道这是多少答案,但它不仅仅是评论可以容纳的。所以我要做的是创建一个空的哈希表,查询组的成员,并为哈希表中的每个用户创建一个条目。然后对于每个额外的组,我会得到成员,我会检查哈希表以查看我是否已经拥有用户信息,如果我没有,我将查询该用户并将其添加到哈希表中。嗯,甚至可能有两个hashtable,一个是groups,每个group都以group name为key,user list为value,然后你可以交叉引用users的hashtable,你就可以输出所有那种方式的信息。

$GroupList = Get-Contant c:\temp\Groups.txt
$GroupHash = @{}
$UserHash = @{}
ForEach($Group in $Groups){
$GroupHash.$Group = Get-ADGroupMember $Group

ForEach($User in ($GroupHash.$Group|Where{!$UserHash.($_.distinguishedName)})){
$UserHash.($User.distinguishedName) = Get-ADUser $User.distinguishedName -Server $($User.distinguishedName -replace "^.*?DC=" -replace ",DC=", ".") -Prop Mail
}
}

之后你会有 $GroupHash那将有每个组的每个组成员的列表,您将有 $UserHash包含可能属于任何组的任何用户的用户详细信息。那么你如何输出该信息取决于你......
ForEach($Group in $GroupHash.Keys){
$GroupHash.$Group.distinguishedName | ForEach{%UserHash.$_} | Select mail,employeeID,title,department,name | Export-CSV C:\Temp\$Group.csv -NoType
}

这将为 C:\Temp 文件夹中的每个组创建一个 CSV 文件,并且它将包含该组中每个人的用户详细信息。

现在请注意,这些都不是递归的,因此您不会获得嵌套组的成员(如果有),但是您的原始脚本不是递归的,因此我没有深入研究。

关于powershell - 使用 Powershell 从多个域的事件目录组中提取所有用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33398740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com