Bnd*_*706 4 powershell active-directory
我试图从一个文本文件中拉出组,我的一个组太大,80,000人.
我如何让它工作l,它输出我想要的方式.
$groups = Get-Content c:\temp\ADGroups.txt
foreach($group in $groups) {
@(Get-ADGroup $group -Properties Member| Select-Object -ExpandProperty Member).Count
Get-ADGroupMember -Identity $group |
Get-ADObject -Properties Name, DisplayName |
Select-Object -Property @{n="Username";e={$_.Name}}, DisplayName,
@{n="AD Group";e={$group}} |
Export-Csv C:\Users\Desktop\GroupsInfo.CSV -NoTypeInformation -Append
}
Run Code Online (Sandbox Code Playgroud)
Ans*_*ers 12
Get-ADGroupMember可以返回的对象数受ADWS(Active Directory Web服务)中的限制的限制:
MaxGroupOrMemberEntries5000
指定组成员(递归或非递归),组成员资格和授权组可以由Active Directory模块中检索的最大数量
Get-ADGroupMember,Get-ADPrincipalGroupMembership和Get-ADAccountAuthorizationGroup小命令.如果您预计这些cmdlet会在您的环境中返回超过5000个结果,请将此参数设置为更高的值.
根据这个线程,你应该能够通过查询组对象和扩展它们的member属性来解决它(如果你不能增加服务的限制):
Get-ADGroup $group -Properties Member |
Select-Object -Expand Member |
Get-ADUser -Property Name, DisplayName
Run Code Online (Sandbox Code Playgroud)
但请注意,这可能会很慢,因为您将发送数千个请求.为所有用户构建哈希表可能更好:
$users = @{}
Get-ADUser -Filter '*' -Property Name, DisplayName | ForEach-Object {
$users[$_.DistinguishedName] = $_
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以通过他们的名字来查找它们:
Get-ADGroup $group -Properties Member |
Select-Object -Expand Member |
ForEach-Object { $users[$_] }
Run Code Online (Sandbox Code Playgroud)
小智 8
我用 Get-ADGroupMember 达到了 5000 的限制。
您可以使用带有 -LDAPFilter 参数的 Get-ADUser 来获取组成员。它很快并且支持> 5000 个条目。
$groups = @(
"group1"
"group2"
"group3"
)
Foreach ($group in $groups) {
Get-ADUser -LDAPFilter "(&(objectCategory=user)(memberof=CN=$group,OU=Groups,OU=rest,DC=of,DC=distinguished,DC=name))" | Export-Csv "C:\$group.csv"
}
Run Code Online (Sandbox Code Playgroud)
看起来您可以使用此方法构建复杂的过滤器。我需要从一些非常大的群体中快速返回启用的成员。我为此使用的过滤器是:
"(&(objectCategory=user)(!useraccountcontrol:1.2.840.113556.1.4.803:=2)(memberof=CN=$group,OU=Groups,OU=rest,DC=of,DC=distinguished,DC=name))"
我听说这是实际服务于 powershell cmdlet 请求的 AD Webservices 的限制。最大大小为 5000。但是您可以尝试 dsget 命令,尽管您需要一点创意。
$GroupDN = (Get-ADGroup -Identity $Group).DistinguishedName将为您提供该组的 DN。
像这样使用DSget。
$members = DSget group $GroupDN -members这将为您提供所有成员的 DN 列表。
将其提供给Get-ADUser管道或foreach循环中的 cmdlet,然后就可以开始了。
| 归档时间: |
|
| 查看次数: |
25238 次 |
| 最近记录: |