旧版 AD 查询工具,按名称、状态或属性查找用户和计算机。
dsquery 属于旧版 AD DS 命令行工具,可按对象类型、名称、OU、禁用状态、密码年龄等条件查询,默认输出对象的可分辨名称(DN)。它常与 dsget 配合,把 DN 管道给后者读取成员或属性。
该工具已不推荐用于新脚本:旧版 AD 工具,优先 Get-ADUser/Get-ADComputer。PowerShell 的 ActiveDirectory 模块支持服务端过滤、对象化输出和错误处理,而 dsquery 只有文本、默认最多返回 100 条(-limit 0 才不限),且过滤语法受 LDAP 限制。
Windows Server 2016+ 安装 AD DS 或 RSAT 后仍可使用,但微软已将其标记为弃用。跨域查询用 -s 指定 DC;在成员机上运行需要 RSAT,且当前凭据要有目录读取权限。
# 按名称通配查询用户,-limit 0 取消默认 100 条限制
C:\> dsquery user -name "张*" -limit 0
# 列出所有已禁用用户
C:\> dsquery user -disabled -limit 0
# 查找 4 周未活动的计算机
C:\> dsquery computer -inactive 4 -limit 0
# 查找密码超过 60 天未更新的计算机
C:\> dsquery computer -stalepwd 60 -limit 0
# 在指定 OU 中用 LDAP 过滤已禁用账户
C:\> dsquery * "OU=Sales,DC=contoso,DC=com" -filter "(&(objectClass=user)(userAccountControl:1.2.840.113556.1.4.803:=2))" -limit 0
# 把组 DN 管道给 dsget,展开成员
C:\> dsquery group -name "Domain Admins" | dsget group -members -expand
dsquery * "DC=contoso,DC=com" -filter "(sAMAccountName=用户名)" 验证。-limit 0,并评估大结果集对 DC 的压力。-inactive 找到的机器并不精确对应 4 周 → lastLogonTimestamp 是粗粒度复制属性,可能滞后约 14 天 → 需要精确登录时间时查 DC 的 4624 事件或使用 PowerShell/AD 审计。*、(、) 未转义 → 语法错误或结果异常 → 用 \2a、\28、\29 转义,并把整个过滤器放在双引号内。dsget 报错 → 结果为空时 dsget 仍会启动 → 先单独运行 dsquery 确认有输出。dsquery → 工具已弃用,未来版本可能移除 → 改用 Get-ADUser、Get-ADComputer,并用 -Filter 在服务端过滤。dsget — 读取 DN 的成员、属性等详细信息Get-ADUser — 推荐的 PowerShell 用户查询方式Get-ADComputer — 推荐的 PowerShell 计算机查询方式net — net user、net group 的本地/域查询findstr — 对文本结果做二次过滤dsquery computer -inactive 4 为什么不能精确代表“正好 4 周未登录”?dsquery?lastLogonTimestamp,该值更新有滞后,通常误差可达约 14 天。-limit 0 取消限制,并评估结果集大小与 DC 负载。Get-ADUser/Get-ADComputer,dsquery 已属旧版工具。
小程序版
微信扫码,随时查命令