gpt4 book ai didi

powershell - 使用 powershell 脚本递归列出广告组中的用户,无需使用 CmdLets

转载 作者:行者123 更新时间:2023-12-02 10:20:09 24 4
gpt4 key购买 nike

我尝试在不使用 PowerShell 中的 CmdLets 的情况下列出事件目录中安全组中的每个人。我的脚本的奇怪之处在于,如果我列出整个目录,它会起作用,但如果我尝试使用 ldap 查询指定我想要列出的内容,它就不起作用。我知道我的 ldap 查询是正确的,因为我已经在另一个类似的 vb 中使用了它并且它有效。注释行是我尝试放入查询的位置。

$strFilter = "(&(objectCategory=person)(objectClass=user))"
#$strFilter = "(&(objectCategory=person)(objectClass=user)(memberOf=CN=Common Name,OU=User Groups,...,DC=ad,DC=domain,DC=com))" #... is just left out part of query

#$objDomain = New-Object System.DirectoryServices.DirectoryEntry
$objDomain = New-Object System.DirectoryServices.DirectoryEntry("LDAP://CN=Common Name,OU=User Groups,...,DC=ad,DC=domain,DC=com") #... is just left out part of query

$objSearcher = New-Object System.DirectoryServices.DirectorySearcher
$objSearcher.SearchRoot = $objDomain
$objSearcher.PageSize = 1000
$objSearcher.Filter = $strFilter
$objSearcher.SearchScope = "Subtree"

$colProplist = "name"
foreach ($i in $colPropList){$objSearcher.PropertiesToLoad.Add($i)}

$colResults = $objSearcher.FindAll()

foreach ($objResult in $colResults)
{$objItem = $objResult.Properties; $objItem.name}

最佳答案

这是在 Active-Directory 2003 SP2 和 2008 R2 中工作的东西。我使用 ADSI 和 Microsoft LDAP_MATCHING_RULE_IN_CHAIN 。它递归搜索(但在一个查询中)来自一组的所有用户(小心它返回来自安全和分发组的用户)

Clear-Host
$dn = New-Object System.DirectoryServices.DirectoryEntry ("LDAP://WM2008R2ENT:389/dc=dom,dc=fr","jpb@dom.fr","PWD")

# To find all the users member of groups "MonGrpPlusSec" :
# Set the base to the groups container DN; for example root DN (dc=societe,dc=fr)
# Set the scope to subtree
# Use the following filter :
# (member:1.2.840.113556.1.4.1941:=CN=MonGrpPlusSec,OU=ForUser1,DC=dom,DC=fr)

$dsLookFor = new-object System.DirectoryServices.DirectorySearcher($dn)
$dsLookFor.Filter = "(&(memberof:1.2.840.113556.1.4.1941:=CN=MonGrpPlusSec,OU=ForUser1,DC=dom,DC=fr)(objectCategory=user))";
$dsLookFor.SearchScope = "subtree";
$n = $dsLookFor.PropertiesToLoad.Add("cn");
$n = $dsLookFor.PropertiesToLoad.Add("distinguishedName");
$n = $dsLookFor.PropertiesToLoad.Add("sAMAccountName");

$lstUsr = $dsLookFor.findall()
foreach ($usrTmp in $lstUsr)
{
Write-Host $usrTmp.Properties["samaccountname"]
}

关于powershell - 使用 powershell 脚本递归列出广告组中的用户,无需使用 CmdLets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8055338/

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