You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在其他服务器上通过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

定时任务适配

避免明文存储密码,使用系统级加密的凭据存储方案:

  1. 首先用后续执行定时任务的用户身份运行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
# 后续添加你需要的业务逻辑即可
  1. 任务计划程序配置:执行用户选择你导出凭据时使用的用户,勾选「不管用户是否登录都要运行」,执行动作填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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:06:03