Gra*_*ant 4 powershell active-directory
我已经开始设置组,如:
其中部门主管是部门员工的成员,部门主管是部门主管的成员。
我知道如何使用 powershell 列出一个人所属的组,可以是直接分配的组,也可以是通过嵌套组继承的组。
但是我想弄清楚的是一个脚本,它将直接和间接地向我显示属于这些组之一的所有用户,例如。用户 A 是部门员工和部门主管的直接成员。
我的谷歌搜索未能找到或编写可以做到这一点的脚本。
编辑:
实际上,嵌套的层数和分支更多,部门也很多,所以很混乱。我想获得直接属于任何组的成员列表,以及间接属于同一组的成员,以便我可以删除多余的组直接成员资格。
以下将遍历给定的父组(名称必须与Get-ADGroupMember语法兼容)并填充两个散列。一个散列将用户 sAMAccountName 作为键,将一组直接组成员身份作为值。第二个散列将包含所有已处理组的键。
它将正确检测并跳过循环组嵌套(例如父级是子级的子级)。您可以Write-Host在控制台中注释掉这些行以减少线路噪音。
Import-Module ActiveDirectory
function Walk-Group ( $group ) {
Get-ADGroupMember $group | Group-Object objectClass -ash | Foreach-Object {
# Add each user to $users hash, add current group to their collection
if ( $_.user ) {
foreach ( $u in $_.user.GetEnumerator() ) {
if ( $users[$u.sAMAccountName] ) {
$users[$u.sAMAccountName] += $group
} else {
$users.Add( $u.sAMAccountName, @($group) )
}
}
}
# Recurse into each child group, skip if group is circular member
if ( $_.group ) {
foreach ( $g in $_.group.GetEnumerator() ) {
if ( $groups[$g.Name] ) {
Write-Host "Existing:" $g.Name
} else {
Write-Host "New Group:" $g.Name
$groups.Add( $g.Name, $true )
Walk-Group $g.Name
}
}
}
}
}
# Hash to collect user/group info.
$users = @{}
# Hash to collect processed groups.
$groups = @{}
# Root group to walk
Walk-Group "Department-staff"
# Display users with mulitple direct memberships
$users.GetEnumerator() | Where-Object { $_.Value.Count -gt 1 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3134 次 |
| 最近记录: |