Windows AD Practice Day1
这是 Windows AD 每日训练的第一天。题目不只练习 PowerShell 命令,也会覆盖 AD 概念、权限判断和实际故障排查。
本次共 12 题,整体掌握度约为 75%~80%。FSMO、Repadmin 和 DCDiag 的基础比较牢固;需要重点复习组权限、登录时间属性以及 RPC 1722 的排查链。
Day 1:前六章综合复习
本日表现
| 范围 | 掌握情况 | 需要加强 |
|---|---|---|
| 用户查询 | 良好 | 继续区分 -Properties 与 Select-Object |
| 组与权限 | 需要复习 | 安全组、访问令牌、嵌套组、Share 与 NTFS ACL |
| 计算机账户 | 基本掌握 | 三种最后登录属性、退域命令的执行对象 |
| FSMO | 良好 | Seize 后旧角色持有者的处置原则 |
| AD 复制 | 基本掌握 | 错误 1722 的完整诊断顺序 |
| DCDiag 与 GPO | 良好 | 补充 gpupdate、gpresult 和 NETLOGON 验证 |
本日重点错题:Q3、Q4、Q5、Q10。 明天开始答题前,先口述一遍这四题的结论。
Q1:查询已禁用用户
题目
查询域中所有已禁用的用户,只显示 Name、SamAccountName 和 DistinguishedName。
我的回答
Search-ADAccount -AccountDisabled -UsersOnly | Select-Object Name,SamAccountName,DistinguishedName复盘
回答正确。也可以使用:
Get-ADUser -Filter 'Enabled -eq $false' | Select-Object Name,SamAccountName,DistinguishedNameSearch-ADAccount 适合常见账户状态查询;Get-ADUser -Filter 更适合组合复杂条件。
Q2:-Filter、-Properties 与 Select-Object
题目
解释下面两条命令,并说明为什么查询 Department 时需要 -Properties。
Get-ADUser -Filter 'Enabled -eq $true'
Get-ADUser -Identity qianyue -Properties Department,LastLogonDate我的回答
- 第一条筛选已启用的用户。
- 第二条查询
qianyue,并额外读取Department和LastLogonDate。 Department不在默认返回属性集合中,因此需要额外指定。
复盘
回答基本正确。-Identity 不只是“用户名字”,还可以接收:
- DistinguishedName
- GUID
- SID
SamAccountName
需要记住:
| 参数 | 作用 |
|---|---|
-Filter | 决定查询哪些 AD 对象 |
-Properties | 决定从 AD 额外读取哪些属性 |
Select-Object | 决定最终显示或传递哪些属性 |
Q3:查询组成员
题目
查询 Domain Admins 的直接成员、递归成员,并查询用户 qianyue 所属的组。
我的回答
第一条误用了 Get-ADGroup;后两条思路正确,但递归查询时写成了另一个组名。
正确答案
# 查询直接成员Get-ADGroupMember -Identity "Domain Admins"
# 递归展开嵌套组Get-ADGroupMember -Identity "Domain Admins" -Recursive
# 查询用户所属的组Get-ADPrincipalGroupMembership -Identity qianyue重点复习:
Get-ADGroup查询组对象本身;Get-ADGroupMember才查询组中的成员。
Q4:已经加组,为什么仍然没有权限
题目
用户已经加入某个组,但仍无法访问共享目录,列出至少四个可能原因。
我的回答
只想到可能与 Kerberos 登录令牌有关,对组类型、嵌套关系和 ACL 缺少明确思路。
正确排查方向
-
加入的是通讯组而不是安全组
Distribution组不能参与 ACL 权限判定,必须确认GroupCategory为Security。Terminal window Get-ADGroup -Identity "组名" -Properties GroupCategory,GroupScope -
用户的访问令牌尚未刷新
用户登录时生成的访问令牌包含当时的组成员关系。后来加组,现有令牌通常不会自动更新。
Terminal window whoami /groups最可靠的验证方式是注销并重新登录。锁屏、断开 RDP 或只执行
gpupdate不一定会生成新令牌。 -
嵌套组没有按预期展开
Terminal window Get-ADGroupMember -Identity "目标组" -Recursive同时检查组作用域、跨域成员限制以及用户是否真的出现在递归结果中。
-
共享权限与 NTFS 权限不一致
SMB 访问需要同时通过共享权限和 NTFS 权限,最终结果取二者中更严格的一方。
Terminal window # 在文件服务器上查询共享权限Get-SmbShareAccess -Name "ShareName"# 查询目录的 NTFS ACLGet-Acl "D:\Shares\ShareName" |Select-Object -ExpandProperty Access -
ACL 中存在显式拒绝
Deny通常优先于Allow。用户可能通过另一个组继承了拒绝项。 -
AD 复制尚未完成
加组操作可能写入 DC01,但用户登录时联系的是尚未收到更新的 DC02。
Terminal window repadmin /replsummary
重点复习:排查权限时要同时确认 AD 组成员关系、用户访问令牌、共享权限和 NTFS ACL。只确认“用户已经在组里”不能证明权限已经生效。
Q5:三种最后登录属性
题目
筛选 90 天未登录的计算机应该使用哪个属性?怎样取得尽可能准确的最后登录时间?
我的回答
选择了 LastLogonDate 做粗筛,这是正确的;但误以为改查 LastLogonTimeStamp 会更准确。
正确结论
LastLogonDate 是 ActiveDirectory PowerShell 模块根据 lastLogonTimestamp 转换出的易读值,二者具有相同的延迟特征。
| 属性 | 是否在 DC 间复制 | 特点 |
|---|---|---|
LastLogonDate | 间接复制 | lastLogonTimestamp 的易读形式,适合长期粗筛 |
LastLogonTimeStamp | 是 | 为减少复制流量而延迟更新,通常可能相差约 9~14 天 |
LastLogon | 否 | 每台 DC 独立记录,精确查询需逐台取最大值 |
粗筛:
$cutoff = (Get-Date).AddDays(-90)
Get-ADComputer -Filter * -Properties LastLogonDate | Where-Object { -not $_.LastLogonDate -or $_.LastLogonDate -lt $cutoff } | Select-Object Name,LastLogonDate精确查询少量关键设备:
$computerName = "PC-01"
Get-ADDomainController -Filter * | ForEach-Object { $computer = Get-ADComputer ` -Identity $computerName ` -Server $_.HostName ` -Properties LastLogon
[pscustomobject]@{ DomainController = $_.HostName LastLogon = if ($computer.LastLogon -gt 0) { [datetime]::FromFileTime($computer.LastLogon) } } } | Sort-Object LastLogon -Descending重点复习:
LastLogonDate与LastLogonTimeStamp不是两套精度;真正精确的方法是查询每台 DC 的LastLogon并取最大值。
Q6:删除计算机对象与计算机退域
题目
解释 Remove-ADComputer 与 Remove-Computer 的区别。
复盘
结论正确,但 $credential 被误认为计算机名。它实际保存的是有权执行退域操作的凭据。
# 删除 AD 中的计算机对象,不会让在线设备自动退出域Remove-ADComputer -Identity PC-OLD-01
# 获取退域凭据$credential = Get-Credential "QY\Administrator"
# 让执行命令的本机退出域并加入工作组Remove-Computer ` -UnjoinDomainCredential $credential ` -WorkgroupName "WORKGROUP"不指定 -ComputerName 时,Remove-Computer 操作的是本机。计算机是“加入域”,不是“加入 DC”。
Q7:FSMO 五角色
我的回答与复盘
本题回答正确。
| 层级 | 角色 | 主要职责 |
|---|---|---|
| 林级 | Schema Master | 接受 Schema 修改 |
| 林级 | Domain Naming Master | 添加或删除域和应用分区 |
| 域级 | PDC Emulator | 时间、密码变更优先处理、账户锁定与部分兼容功能 |
| 域级 | RID Master | 向 DC 分配 RID 池 |
| 域级 | Infrastructure Master | 更新跨域对象引用 |
Q8:Transfer 与 Seize
我的回答
- 原 DC 正常可用或计划下线时,使用 Transfer。
- 原角色持有者永久故障、确认不能恢复时,才使用 Seize。
复盘
核心判断正确,但“会立即导致域崩溃”的描述过于绝对。真正风险是旧角色持有者没有得知角色已经被夺取,又重新执行角色专属操作,形成类似双主或数据不一致的状态。
需要记住:
Seize 不是更强的 Transfer,而是灾难恢复手段。角色被夺取后,旧持有者不能未经清理或重建就直接重新接入生产网络。
RID Master 被夺取时尤其要关注 RID 池与重复 SID 风险;PDC Emulator 则会影响时间、密码变更、账户锁定和组策略管理行为。
Q9:Repadmin 常用命令
我的回答与复盘
总体正确,需要把 showrepl 的方向说得更准确。
# 全局复制摘要repadmin /replsummary
# QYNET-CORE01 的入站复制详情repadmin /showrepl QYNET-CORE01
# 同步当前 DC 的所有分区,并跨站点向外推送repadmin /syncall /AdeP| 参数 | 含义 |
|---|---|
/A | 当前服务器上的所有命名上下文 |
/d | 使用 DN 标识服务器,而不是 GUID |
/e | 扩展到企业中的其他站点 |
/P | Push,从当前 DC 向外推动复制 |
/e 在多站点环境可能瞬间增加站点间链路流量,不能把 /syncall /AdeP 当作日常无脑修复命令。
Q10:复制错误 1722
题目
repadmin /replsummary 显示 QYNET-CORE02 复制失败,错误为 1722 The RPC server is unavailable,应该怎样排查?
我的回答
想到先检查 Ping、DNS、复制摘要和事件日志,但排查链不够完整。
推荐顺序
# 1. DNS 正向解析是否正确Resolve-DnsName QYNET-CORE02.qy.net
# 2. ICMP 只作为辅助信息Test-Connection QYNET-CORE02 -Count 2
# 3. RPC Endpoint MapperTest-NetConnection QYNET-CORE02 -Port 135
# 4. LDAP 与 SMBTest-NetConnection QYNET-CORE02 -Port 389Test-NetConnection QYNET-CORE02 -Port 445
# 5. DCDiag 基础检查dcdiag /s:QYNET-CORE02 /test:Connectivity /vdcdiag /s:QYNET-CORE02 /test:DNS /DnsBasic /v
# 6. 查看具体复制伙伴、分区和错误repadmin /showrepl QYNET-CORE02 /verbose还要检查:
- RPC、NTDS、Netlogon、DNS、KDC 等服务。
- Windows 防火墙及 RPC 动态端口。
- 两台 DC 的 DNS 客户端配置。
- 路由、站点间 ACL 和网络设备。
- 时间同步、Kerberos 与安全通道。
- Directory Service、DNS Server 和 System 事件日志。
重点复习:1722 表示 RPC 通信不可用,不等于服务器一定关机。Ping 可能被防火墙禁用;Ping 成功也不能证明 TCP 135 和 RPC 动态端口可用。
Q11:DCDiag 检查顺序
我的回答与复盘
总体正确:
Connectivity → DNS → Advertising → Replications → SYSVOLAdvertising 不是检查 DC “拥有哪种角色”,而是检查 DC 是否正常向客户端声明自己能够提供 LDAP、KDC、GC、时间服务等能力。
DNS 失败会让 DC 定位、复制伙伴查找、FSMO 定位和 Kerberos 认证产生大量连锁错误。因此应先修复 DNS,再重新运行后续测试,而不是同时修改多个组件。
Q12:能够登录,但计算机 GPO 没有应用
我的回答
已经覆盖计算机 OU、GPO 链接、DNS、SRV、DC Locator、DCDiag、SYSVOL 和 DFSR 日志,整体排查思路良好。
遗漏内容
缺少最后的策略刷新和结果查询:
# 在客户端刷新策略gpupdate /force
# 查看计算机策略摘要gpresult /Scope Computer /R
# 生成详细报告gpresult /Scope Computer /H "C:\Temp\Computer-GPO.html"同时验证两个关键共享:
Test-Path "\\qy.net\SYSVOL"Test-Path "\\qy.net\NETLOGON"dcdiag 主要用于诊断域控制器。应在 DC 或装有 RSAT 的管理机上,针对客户端实际定位到的 DC 运行:
dcdiag /s:QYNET-CORE01 /test:Connectivitydcdiag /s:QYNET-CORE01 /test:DNS /DnsBasic /vdcdiag /s:QYNET-CORE01 /test:Advertisingdcdiag /s:QYNET-CORE01 /test:SysVolCheck /test:NetLogons明日开始前的快速复习
不看答案,尝试口述下面五句话:
Get-ADGroup与Get-ADGroupMember的区别是什么?- 为什么用户加组后通常需要注销并重新登录?
LastLogonDate与LastLogonTimeStamp有什么关系?- 为什么错误 1722 不能只用 Ping 判断?
Advertising测试的到底是什么?
延伸阅读:Windows AD 重要问题库
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!













