如何在其他服务器上通过PowerShell连接LDAP查询Active Directory
解决PowerShell通过LDAP查询Active Directory的方案
你之前遇到的cmdlet识别报错,是因为这两个命令不属于通用AD查询模块:
New-AdfsLdapServerConnection是AD FS(活动目录联合身份验证服务)专属模块的命令,仅安装了AD FS角色的服务器才会携带Test-LDAPConnection多数是第三方或用户自定义函数,Windows系统默认不提供
以下是两种可落地的实现方案:
方案一:使用RSAT Active Directory PowerShell模块(推荐)
该方案可以直接使用你需要的Get-ADGroup类原生命令,语法最简单,维护成本最低。
安装步骤
- 针对Windows Server 2016/2019/2022(需管理员权限运行PowerShell):
Install-WindowsFeature RSAT-AD-PowerShell
- 针对Win10/Win11客户端(需管理员权限运行PowerShell):
Install-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
也可以通过「设置-应用-可选功能-添加功能」,搜索「RSAT: Active Directory 域服务和轻型目录服务工具」手动安装。
连接查询示例
# 弹窗输入LDAP登录凭据 $adCred = Get-Credential # 指定LDAP服务器地址+端口,普通LDAP默认端口389,LDAPS默认端口636 $ldapServer = "你的LDAP服务器地址:389" # 执行目标组查询 Get-ADGroup -Filter 'Name -like "Sec-abc-xyz-123-U"' -Server $ldapServer -Credential $adCred
定时任务适配
避免明文存储密码,使用系统级加密的凭据存储方案:
- 首先用后续执行定时任务的用户身份运行PowerShell,执行命令导出凭据:
Get-Credential | Export-Clixml -Path "C:\你的脚本目录\ad_cred.xml"
该加密文件仅当前用户、当前机器可解密,安全性符合生产环境要求。
2. 脚本中直接导入凭据使用:
$adCred = Import-Clixml -Path "C:\你的脚本目录\ad_cred.xml" $ldapServer = "你的LDAP服务器地址:389" $targetGroups = Get-ADGroup -Filter 'Name -like "Sec-abc-xyz-123-U"' -Server $ldapServer -Credential $adCred # 后续添加你需要的业务逻辑即可
- 任务计划程序配置:执行用户选择你导出凭据时使用的用户,勾选「不管用户是否登录都要运行」,执行动作填
powershell.exe -ExecutionPolicy Bypass -File "C:\你的脚本目录\脚本名.ps1"即可。
方案二:使用.NET原生类(无需安装额外模块)
如果服务器限制无法安装RSAT工具,可以用系统自带的System.DirectoryServices类实现LDAP查询,兼容性最高。
查询示例
# LDAP连接字符串,替换为你的域根节点、服务器地址和端口 $ldapPath = "LDAP://你的LDAP服务器地址:389/DC=你的域名,DC=后缀" $adCred = Get-Credential # 创建LDAP连接对象 $ldapConn = New-Object System.DirectoryServices.DirectoryEntry($ldapPath, $adCred.UserName, $adCred.GetNetworkCredential().Password) # 配置查询规则 $searcher = New-Object System.DirectoryServices.DirectorySearcher($ldapConn) $searcher.Filter = "(&(objectClass=group)(name=*Sec-abc-xyz-123-U*))" # 执行查询 $groups = $searcher.FindAll() # 遍历输出结果 foreach ($group in $groups) { Write-Host "组名:$($group.Properties.name[0]) 可分辨名称:$($group.Properties.distinguishedname[0])" }
注意事项
- 使用LDAPS(端口636)加密连接时,仅需将端口改为636,连接字符串前缀依然为
LDAP://即可,无需修改为LDAPS,同时需要确保本地服务器信任LDAP服务器的SSL证书,否则会连接失败 - 定时任务适配逻辑和方案一一致,使用
Export-Clixml加密存储凭据即可
内容的提问来源于stack exchange,提问作者Pal
相关产品推荐
相关产品推荐

