gpt4 book ai didi

powershell - 使用 Powershell 获取所有 AD 用户的递归组成员身份

转载 作者:行者123 更新时间:2023-12-04 15:18:33 25 4
gpt4 key购买 nike

我正在尝试制作一个 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
}
}

但脚本不会递归地列出组,即,如果输出文件中列出的组是另一个组的一部分。

例子:

组 1:用户

组 2:组 3:用户

脚本仅显示 Group1 和 3,但不显示 2。

我应该在第一个以递归方式编写组成员身份的脚本中添加什么?

最佳答案

对不起,我发布了一个 3 年前的问题的答案,但如果有人会看到它,它会有所帮助。
归功于:
How to get ALL AD user groups (recursively) with Powershell or other tools?

您可以使用 LDAP_MATCHING_RULE_IN_CHAIN :

Get-ADGroup -LDAPFilter "(member:1.2.840.113556.1.4.1941:=CN=User,CN=USers,DC=x)"

您可以在任何可以使用 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

修正你的脚本:

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

关于powershell - 使用 Powershell 获取所有 AD 用户的递归组成员身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23885149/

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