【发布时间】:2015-01-05 15:53:28
【问题描述】:
我想按照以下格式从 Active Directory 中检索所有组的所有成员的列表
Group | Member
----------------
group1 | member1
group1 | member2
group1 | member3
group2 | member1
group2 | member4
...
实际上,我有一个使用 Quest cmdlts 检索组成员的 PowerShell 脚本,但性能非常差(最多需要 30 小时才能完成提取),因此我目前仅尝试检索主要组的成员。
我尝试使用 DSGET 命令,但它不显示组名或 ID,只显示成员列表
dsquery group -limit 0 | dsget group -members
我也尝试使用命令CSVDE,但没有成功
如果可能的话,我想要一个不使用 Quest cmdlts 或 AD cmdlet 的解决方案(Get-ADGroupMember ...)
编辑: 实际的 Quest cmdlts 脚本,我没有 Powershell 知识,所以我无法真正解释它是如何工作的......
$csv = get-content "C:\group_names.txt"
$result = $csv | foreach-object { $group=$_ get-qadgroupmember "$_"
-PageSize 500 -sizelimit 0 -indirect |
select-object sAMAccountName,@{n="GroupName";e={$group}} } $result |
export-csv C:\group_members.csv -Delimiter "|" -notypeinformation
【问题讨论】:
-
使用 quest cmdlet 的 powershell 脚本是什么样的?也许我们可以优化它。您是否也只需要直接成员或间接成员(通过嵌套组)?否则,您可以使用 adsi。搜索“powershell get members adsi”之类的。
-
@FrodeF。我将实际脚本添加到问题中,我更喜欢获取直接成员,然后找到另一个解决方案来检索子成员(可能通过 SQL),因为检索子成员也需要很长时间
-
"我想要一个不使用 Quest cmdlts 和 AD cmdlet 的解决方案" 为什么?您必须像执行直接 LDAP 查询的旧 VBScript 查询一样编写它。这完全是粗暴和容易出错的,而且可能表现更差。
-
@BaconBits 这就是我添加“如果可能”的原因,原因是我没有权限导入 Active Directory 模块也没有查询 Quest,而且我怀疑 Quest 服务器管理不善并且Quest cmdlts 运行速度非常慢
-
quest cmdlet 可以使用 LDAP 直接与 DC 对话。我认为可以将它用于某种类型的 Quest 服务器(就像您可能正在做的那样),但这不是 99% 的模块用户使用它的方式。 :)
标签: powershell active-directory