LDAP 笔记
在 LDAP 中,每个对象都拥有独一无二的 DN 属性和 RDN,DN 是整个树中唯一的标识,RDN 是 DN 中每一个逗号分割的表达式。如 “CN=Admin,DC=test,DC=com”,整体是一个 DN,其中有三个 RDN,分别是 CN=Admin、DC=test、DC=com
查询方式
# 获取用户的域对象
$domainObj = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()
# 获取 PDC
$PDC = $domainObj.PdcRoleOwner.Name
# 使用 ADSI 检索 DN
$DN = ([adsi]'').distinguishedName
# 组装完整 LDAP 路径
$LDAP = "LDAP://$PDC/$DN"
# 创建 DirectoryEntry 类(DirectoryEntry 类中封装了 AD 服务层次结构中的节点与对象)
$direntry = New-Object System.DirectoryServices.DirectoryEntry($LDAP)
# 创建 DirectorySearcher 使用 LDAP 对 AD 进行查询
$dirsearcher = New-Object System.DirectoryServices.DirectorySearcher($direntry)
$result = $dirsearcher.FindAll()
# samAccountType 属性为 0x30000000 的对象
$dirsearcher.filter="samAccountType=805306368"
# $dirsearcher.filter="name=jeffadmin" 过滤用户信息
$result = $dirsearcher.FindAll()
# 遍历打印每个对象的每个属性
Foreach($obj in $result)
{
Foreach($prop in $obj.Properties)
{
$prop
# $prop.memberof 打印对应对象所属组
}
Write-Host ”-------------------------------”
}
也可以封装为函数
function LDAPSearch {
param(
[string]$LDAPQuery
)
$PDC = [System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain().PdcRoleOwner.Nam
e
$DistinguishedName = ([adsi]'').distinguishedName
$DirectoryEntry = New-Object System.DirectoryServices.DirectoryEntry("LDAP://$PDC/$DistinguishedName")
$DirectorySearcher = New-Object System.DirectoryServices.DirectorySearcher($DirectoryEntry, $LDAPQuery)
return $DirectorySearcher.FindAll()
}
调用方法
PS c:\> Import-Module LDAP.ps1
PS c:\> LDAPsearch -LDAPQuery "(samAccountType=805306368)"
PS c:\> LDAPsearch -LDAPQuery "(objectclass=group)"
...
