Pho*_*ria 2 membership powershell recursion active-directory-group
我正在尝试制作一个 PS 脚本,它会列出所有 Active Directory 用户组成员身份(递归)。
我已经有工作脚本:
import-module activedirectory
$users = get-aduser -Filter {Name -Like "*"} -Searchbase "ou=Users, dc=Domain" | Where-Object { $_.Enabled -eq 'True' }
$targetFile = "D:\users.csv"
rm $targetFile
Add-Content $targetFile "User;Group"
foreach ($user in $users)
{
$groups = Get-ADPrincipalGroupMembership $user
foreach ($group in $groups)
{
$username = $user.samaccountname
$groupname = $group.name
$line = "$username;$groupname"
Add-Content $targetFile $line
}
}
Run Code Online (Sandbox Code Playgroud)
但是脚本不会递归列出组,即,如果输出文件中列出的组是另一个组的一部分。
例子:
组 1:用户
组 2:组 3:用户
脚本仅显示 Group1 和 3,但不显示 2。
我应该向它以递归方式编写组成员身份的第一个脚本添加什么?
抱歉,我正在发布 3 年前一个问题的答案,但如果有人会看到它,它会有所帮助。
归功于:
如何使用 Powershell 或其他工具(递归地)获取所有 AD 用户组?
您可以使用LDAP_MATCHING_RULE_IN_CHAIN:
Get-ADGroup -LDAPFilter "(member:1.2.840.113556.1.4.1941:=CN=User,CN=USers,DC=x)"
Run Code Online (Sandbox Code Playgroud)
您可以在任何可以使用 LDAP 过滤器的地方使用它。
例子:
$username = 'myUsername'
$dn = (Get-ADUser $username).DistinguishedName
Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $dn) | select -expand Name | sort Name
Run Code Online (Sandbox Code Playgroud)
修复您的脚本:
import-module activedirectory
$users = get-aduser -Filter {Name -Like "*"} -Searchbase "ou=Users, dc=Domain" | Where-Object { $_.Enabled -eq 'True' }
$targetFile = "D:\users.csv"
rm $targetFile
Add-Content $targetFile "User;Group"
foreach ($user in $users)
{
$dn = $user.DistinguishedName
$groups = Get-ADGroup -LDAPFilter ("(member:1.2.840.113556.1.4.1941:={0})" -f $dn) | select -expand Name | sort Name
foreach ($group in $groups)
{
$username = $user.samaccountname
$groupname = $group.name
$line = "$username;$groupname"
Add-Content $targetFile $line
}
}
Run Code Online (Sandbox Code Playgroud)