系统学习 Windows 学习路径:从 CMD 到 PowerShell、系统网络,再到 WSL 与 Server

dsquery

旧版 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

易错点与排错

相关命令

参考链接

读完自测

  1. dsquery computer -inactive 4 为什么不能精确代表“正好 4 周未登录”?
  2. 查询结果被截断为 100 条时该怎么处理?
  3. 新写的自动化脚本应优先使用什么替代 dsquery?
答案
  1. 它依赖复制的 lastLogonTimestamp,该值更新有滞后,通常误差可达约 14 天。
  2. 加 -limit 0 取消限制,并评估结果集大小与 DC 负载。
  3. 优先用 ActiveDirectory 模块的 Get-ADUser/Get-ADComputer,dsquery 已属旧版工具。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令