Windows AD Practice Day2
这是 Windows AD 每日训练的第二天,复习组权限、最后登录属性和 RPC 1722,并重点检查 DNS、SPN、Kerberos 票据与域时间同步。
Day 2:权限、Kerberos 与时间同步
今天的总体评价
主卷共 12 题,后面还有对话加练。概念方向掌握度约为 55%~60%:能够较快判断问题属于组权限、RPC、SPN、Kerberos 或时间层面,但命令精度、概念边界和完整验证链仍需加强。部分“我的回答”为当时作答摘要,而非逐字转录。
| 范围 | 掌握情况 | 需要加强 |
|---|---|---|
| 组查询 | 良好 | 保持区分组对象、组成员和主体所属组 |
| 登录时间 | 需要复习 | LastLogonDate 是转换属性;LastLogon 不复制 |
| 共享权限 | 基础方向正确 | 区分 SMB 会话、共享 ACL 与 NTFS ACL |
| RPC 1722 | 有基础框架 | 动态 RPC、服务、事件日志与修复后验证 |
| DNS 与 SPN | 部分掌握 | SRV 完整名称、-F 全林范围、SPN 与账户映射 |
| Kerberos | 初步理解 | TGT、服务票据、SPN、服务密钥与 ACL 的边界 |
| 登录会话 | 需要复习 | LUID 不是 SID 或 GUID;票据缓存按会话隔离 |
| 域时间 | 部分掌握 | 只有林根域 PDC 默认对接外部时间源;时间不是由 GPO“下发” |
| 综合排障 | 明显不足 | 建立“验证—定位—修复—清缓存—复测—日志确认”闭环 |
本日重点错题:Q2、Q3、Q4、Q9、Q10、Q11、Q12。
Q1:组对象、组成员与用户所属组
**题目:**分别查询 QYNET-Admin 组对象、递归成员,以及 qianyue 所属的组。
我的回答:
Get-ADGroup QYNET-Admin
Get-ADGroupMember -Identity QYNET-Admin -Recursive
Get-ADPrincipalGroupMembership -Identity qianyue批改:
回答正确。Get-ADGroup 的第一个位置参数就是 -Identity,因此第一条省略参数名仍然有效。
三条命令分别查询:
| 命令 | 查询对象 |
|---|---|
Get-ADGroup | 组对象本身 |
Get-ADGroupMember | 组中有哪些成员 |
Get-ADPrincipalGroupMembership | 某个安全主体属于哪些组 |
若要检查组能否用于授权,应继续查看类别和作用域:
Get-ADGroup -Identity QYNET-Admin | Select-Object Name,GroupCategory,GroupScopeQ2:三种最后登录时间
**题目:**解释 LastLogonDate、lastLogonTimestamp 与 lastLogon 的来源、复制特性和用途;如何较准确地查询最后登录时间?
我的回答:
LastLogonDate是最后登录日期。LastLogonTimeStamp是最后登录时间戳。LastLogon是最后登录时间。LastLogon最精确;查询所有 DC 是因为复制可能滞后,尤其要关注 PDC。
批改:需要纠正的地方
前半部分只是根据名称解释,没有说明真正的技术区别。查询所有 DC 也不是为了等待复制完成,而是因为 LastLogon 根本不会在 DC 之间复制;PDC 并不保存全域唯一、最完整的 LastLogon。
正确思路与答案:
| 属性 | 本质 | 是否复制 | 用途 |
|---|---|---|---|
LastLogonDate | AD 模块把 lastLogonTimestamp 转换成易读日期 | 间接依赖可复制属性 | 长期不活跃对象粗筛 |
LastLogonTimeStamp | AD 中的 lastLogonTimestamp 原始 FILETIME | 会复制,但更新有意延迟 | 90 天、180 天不活跃粗筛 |
LastLogon | 当前 DC 记录的精确登录值 | 不复制 | 查询每台 DC 后取最大值 |
# 粗筛 90 天未登录用户Search-ADAccount ` -AccountInactive ` -TimeSpan 90.00:00:00 ` -UsersOnly查询一个用户在所有 DC 上的 LastLogon:
$user = "qianyue"
Get-ADDomainController -Filter * | ForEach-Object { $result = Get-ADUser ` -Identity $user ` -Server $_.HostName ` -Properties LastLogon
[pscustomobject]@{ DomainController = $_.HostName LastLogon = if ($result.LastLogon -gt 0) { [datetime]::FromFileTime($result.LastLogon) } } } | Sort-Object LastLogon -Descending重点复习:
LastLogonDate不是一套更粗的独立登录记录,它只是lastLogonTimestamp的易读转换。
Q3:已经加入安全组,为什么仍然没有共享权限
题目:qianyue 已加入 QYNET-File-Read,却仍无法访问共享。如何区分 AD 成员关系、当前令牌、票据、SMB 会话、共享 ACL 与 NTFS ACL?
我的回答:
当时写了:
Get-ADGroupMember -Identity QYNET-File-Read -RecursiveGet-ADPrincipalGroupMembership -Identity qianyue
whoami /allwhoami /groups
net useklist
Get-SmbSessionGet-SmbOpenFile批改:做得好的地方
- 知道同时检查 AD 组成员关系和客户端登录令牌。
- 知道旧的 SMB 连接和 Kerberos 票据可能继续保存原身份状态。
- 知道问题不能只在 DC 上检查。
正确思路与答案:关键遗漏
Get-SmbSession 和 Get-SmbOpenFile 查询的是服务器上的 SMB 会话与打开文件,不是共享 ACL。
共享权限应在文件服务器上查询:
Get-SmbShareAccess -Name "Public"NTFS ACL 应查询共享对应的本地目录:
Get-Acl "D:\Shares\Public" | Select-Object -ExpandProperty Access完整排查链:
# 1. AD 成员关系与组类型Get-ADGroup -Identity QYNET-File-Read | Select-Object Name,GroupCategory,GroupScope
Get-ADGroupMember -Identity QYNET-File-Read -Recursive | Where-Object SamAccountName -eq "qianyue"
# 2. 当前登录令牌whoami /groups | findstr /i "QYNET-File-Read"
# 3. 当前票据与旧连接klistnet use
# 4. 在文件服务器上查询共享与 NTFS ACLGet-SmbShareAccess -Name "Public"
Get-Acl "D:\Shares\Public" | Select-Object -ExpandProperty Access判断刷新方式:
- SPN、服务账户或旧服务票据变化:修复根因后可以使用
klist purge验证。 - 用户登录后才被加入新组:
klist purge不会重建当前桌面登录令牌,最可靠的方法是注销并重新登录。 - 已建立 SMB 连接:关闭文件后使用
net use \\server\share /delete,再重新连接。
重点复习:SMB 会话不是共享权限;共享 ACL 和 NTFS ACL 必须分别检查。
Q4:复制错误 1722
**题目:**某 DC 复制错误 1722。如何解释 Ping、TCP 135 的测试结果,并按顺序检查 DNS、RPC、服务与复制详情?
我的回答:
当时提到了 Ping、名称解析、RpcEptMapper、TCP 135 和防火墙,并指出 Ping 失败不等于服务器关机。
批改:需要修正的地方
- Ping 使用 ICMP,不存在“Ping 的端口”。
- TCP 135 只负责 RPC Endpoint Mapper;实际 RPC 会话还会使用协商出的动态 TCP 端口。
Get-NetFirewallRule -DisplayName "RPC"是精确名称匹配,通常不能完整列出 RPC 相关规则。- 动态 RPC 不是简单查一个名为
Dynamic的防火墙规则。 - 缺少
repadmin /showrepl、DCDiag 和事件日志。
正确思路与答案:推荐顺序
# 1. 名称与地址Resolve-DnsName QYNET-CORE02.qy.netResolve-DnsName 192.168.254.11 -Type PTRnltest /dsgetdc:qy.net /force
# 2. ICMP 只作参考Test-Connection QYNET-CORE02 -Count 2
# 3. 常见 AD 端口与 RPC Endpoint MapperTest-NetConnection QYNET-CORE02 -Port 53Test-NetConnection QYNET-CORE02 -Port 88Test-NetConnection QYNET-CORE02 -Port 135Test-NetConnection QYNET-CORE02 -Port 389Test-NetConnection QYNET-CORE02 -Port 445
# 4. 检查关键服务Get-Service -ComputerName QYNET-CORE02 ` -Name RpcSs,RpcEptMapper,Netlogon,NTDS,KDC,DNS
# 5. 查看目标 DC 的入站复制详情repadmin /showrepl QYNET-CORE02 /verbose
# 6. 验证连通性、DNS 和复制dcdiag /s:QYNET-CORE02 /test:connectivity /vdcdiag /s:QYNET-CORE02 /test:DNS /vdcdiag /s:QYNET-CORE02 /test:replications /v
# 7. 修复后重新验证repadmin /replsummaryrepadmin /showrepl QYNET-CORE02RPC 动态端口在现代 Windows Server 上通常位于高位 TCP 端口范围。TCP 135 成功只表示能联系 Endpoint Mapper,不能证明后续协商的动态端口一定畅通。
还应检查目标 DC 的 System、Directory Service、DNS Server 和 DFS Replication 日志。
重点复习:1722 是 RPC 通信链失败,不是“服务器关机”的同义词。
Q5:DNS、SRV 与 SPN
**题目:**查询 Kerberos SRV 记录、全林 SPN 所有者与重复项,并为服务账户安全添加 SPN。
我的回答:
当时记得 setspn -Q、setspn -X 和 setspn -S 的主要作用;SRV 查询名称与全林范围没有写完整。
批改: SRV 名称未写完整,也漏了全林查询范围;setspn -Q、-X、-S 的方向已掌握。正确命令如下:
# 1. 查询 Kerberos KDC SRV 记录Resolve-DnsName -Type SRV "_kerberos._tcp.qy.net"
# 也可以使用 Nslookupnslookup -type=SRV _kerberos._tcp.qy.net
# 2. 在整个林中反向查询 SPN 所有者setspn -F -Q HTTP/testweb.qy.net
# 3. 在整个林中检查重复 SPNsetspn -X -F
# 4. 安全添加 SPNsetspn -S HTTP/testweb.qy.net QY\svc_testwebsetspn -U 用来明确目标是用户账户,在已提供明确域用户名称时通常不是必需项。
-S 会先检查重复再添加;-A 直接写入,可能制造重复 SPN。重复 SPN 会使 KDC 无法唯一确定应该使用哪个账户密钥,导致票据申请失败或认证异常。
重点复习:SRV 查询必须包含服务和协议标签,例如
_kerberos._tcp.qy.net,不能只查询普通域名。
Q6:Kerberos 认证流程
**题目:**按顺序说明 TGT、KDC、TGS、SPN、服务票据和目标资源 ACL 在 Kerberos 访问中的作用。
我的回答:
当时描述的大致顺序是:KDC 验证用户、TGT 用于继续申请票据、TGS 签发服务票据、SPN 标识目标服务。
批改:需要修正的地方
- KDC 不是“服务票据本身”,而是运行在 DC 上的密钥分发服务。
- SPN 不只是资源名称,而是把服务实例映射到 AD 安全主体。
- 目标服务账户密钥不是交给用户的“访问钥匙”,而是服务端用于解密和验证服务票据的密钥。
正确思路与答案:完整流程
1. 用户登录,客户端向 KDC 的 AS 请求 TGT ↓2. AS 验证用户,返回 TGT ↓3. 客户端携带 TGT,并以目标 SPN 请求服务票据 ↓4. KDC 的 TGS 查找 SPN 所属账户,签发服务票据 ↓5. 客户端把服务票据交给目标服务 ↓6. 目标服务使用自身账户密钥解密并验证票据 ↓7. 服务根据用户身份、组信息与资源 ACL 决定是否授权拿到 TGT 只证明用户可以继续向 KDC 申请服务票据。它不证明:
- 目标 SPN 存在且属于正确账户。
- 目标服务能够解密票据。
- 服务在线并接受 Kerberos。
- 共享权限和 NTFS ACL 已授权。
Q7:阅读 klist 结果
**题目:**阅读 klist 输出:缓存为空说明什么?krbtgt 与 cifs 票据有何区别?klist get 成功能证明什么?
**我的回答:**新登录会话尚未使用 Kerberos 访问服务时,票据缓存可以为空;第二问用“服务端票据、客户端票据”区分两张票据。
**批改:**第一问正确;第二问应区分 TGT 与目标服务票据,而不是“服务端/客户端票据”:
| Server 字段 | 票据类型 |
|---|---|
krbtgt/QY.NET | TGT,用于向 KDC 继续申请票据 |
cifs/QYNET-CORE01.qy.net | CIFS 服务票据,用于访问目标 SMB/CIFS 服务 |
klist get 成功可以证明:
- 当前登录会话能够联系 KDC。
- 当前主体能够获得 TGT。
- KDC 能够把目标 SPN 唯一解析到一个主体并签发服务票据。
- 票据已经进入当前登录会话缓存。
它不能证明:
- SPN 一定注册在实际运行服务的正确账户上。
- 目标服务拥有匹配密钥并能解密票据。
- 应用实际使用了这张票据,而不是回退到 NTLM。
- 服务在线、业务正常或 ACL 已允许访问。
如果 KDC 能看到重复 SPN,通常会因为主体不唯一而拒绝签发;因此“成功签发后仍完全不能说明是否重复”不够准确。但 DC 复制不一致时,仍应结合 setspn -X -F 检查全林状态。
Q8:klist purge 的边界
**题目:**用户刚加入安全组却仍无权限,klist purge 能刷新什么、不能刷新什么?应如何验证与重新登录?
我的回答:
它清的是 Kerberos 票据,不是登录令牌。必须注销,或者创建新的登录会话。
批改:
核心判断正确,但处理流程还应补全:
- 先确认 AD 中的新组成员关系已存在并已复制。
- 使用
whoami /groups检查当前登录令牌。 - 如果令牌缺少新组,注销并重新登录。
- 关闭已打开文件,再清理旧 SMB 连接。
- 修复 SPN 或服务身份后,才使用
klist purge排除旧票据。 - 重新连接资源并检查新票据和权限。
whoami /groupsklistnet use
net use \\QYNET-FS01\Public /deleteklist purgeklist purge 不会重建当前桌面会话的本地访问令牌,也不会自动保证所有应用重新建立连接。
Q9:票据属于哪一个会话
**题目:**解释 klist 的票据属于哪个登录会话、0x3e7 和 LUID 的含义,并区分 LUID、SID 与 ObjectGUID。
我的回答:
- 认为
0x3e7通常是 SYSTEM 登录会话。 - 认为票据缓存按登录会话隔离。
- 对 LUID 与 SID、GUID 的区别不确定。
**批改:**知道票据缓存按会话隔离,也认出了 SYSTEM 常见的 0x3e7;需要把 LUID 与 SID、ObjectGUID 分开。
正确思路与答案:
klist sessions 用于列出本机登录会话,包括每个会话的 LUID、账户和认证类型。
LUID 是由本机 LSA 分配的 Locally Unique Identifier,用于在当前计算机、当前运行周期中标识一个登录会话。它不是:
- 用户或组的 SID。
- AD 对象的 ObjectGUID。
- 全域或全林身份标识。
# 当前命令所在登录会话klist
# 列出所有登录会话klist sessions
# 查询 SYSTEM 会话klist -li 0x3e7普通 klist 只查看当前命令所属 LUID 的缓存。Windows 服务、SYSTEM、计划任务、远程管理和其他用户分别处在不同登录会话中,因此不会自动显示在当前缓存里。
klist purge -li 0x3e7 会清除计算机身份和 SYSTEM 服务使用的票据,可能影响 GPO、LDAP、SMB、服务认证和其他域操作。在 DC 上尤其不应随意执行,但也不是“一执行 DC 就必然爆炸”;应准确描述为高影响操作。
重点复习:LUID 标识本机登录会话,SID 标识安全主体,ObjectGUID 标识 AD 对象。
Q10:AD 域时间层级
**题目:**说明 AD 域时间层级:哪个 PDC 应对接权威上游,其他 DC 与成员机通常如何同步?
我的回答:
当时提到了 PDC 与外部 NTP、其他 DC 和客户端之间的层级,也指出让所有成员机访问公网会增加安全和稳定性问题。
批改:两个关键错误
- 不是每个域的 PDC Emulator 都直接配置公网 NTP;默认只让林根域 PDC Emulator位于整林时间层级顶端并对接权威上游。
- 时间不是由 PDC 通过 GPO“下发”到其他计算机;GPO 可以配置 W32Time,但实际同步由 Windows Time 服务按照域层级和选择算法完成。
权威外部 NTP / 组织内部时钟 ↓林根域 PDC Emulator ↓子域 PDC Emulator与其他合适的上级 DC ↓其他域控制器 ↓成员服务器与客户端普通成员默认使用 NT5DS,从域层级选择时间源。这样可以:
- 保持全林时间一致。
- 使用域内经过身份验证的时间同步。
- 避免每台设备依赖公网与外部 DNS。
- 避免形成混乱或循环的时间拓扑。
Q11:分析实验环境的时间状态
**题目:**实验环境中的林根域 PDC 显示 Local CMOS Clock、Type: NT5DS 和 Stratum: 1。这些结果分别能、不能证明什么?配置前应检查什么?
我的回答:
当时识别出 Local CMOS Clock 与林根域 PDC,并提到配置前要检查 UDP 123、DNS 和已有配置。
批改:需要修正的地方
Type: NT5DS 不表示“NT5DS 的来源是本地 CMOS”。它表示 W32Time 正尝试从 AD 域层级选取时间源;由于该服务器本身就是林根域 PDC,层级上方没有其他域时间源,最终退回到本地硬件时钟。
Stratum: 1 也不能单独证明连接了外部硬件时钟。本机以 LOCL 作为 RefID 时,也可能把自己作为低层级时间源播发。应同时检查:
SourceReferenceId/RefIDLast Successful Sync Time/query /peers- Time-Service 事件日志
正确思路:配置前检查
Get-ADDomain | Select-Object DNSRoot,PDCEmulatorGet-ADForest | Select-Object RootDomain
w32tm /query /sourcew32tm /query /statusw32tm /query /configurationw32tm /query /peers
Resolve-DnsName ntp.aliyun.comw32tm /stripchart /computer:ntp.aliyun.com /samples:5 /dataonly当前实验 VM 无法解析 ntp.aliyun.com,所以正式配置前还需要先修复外部 DNS 解析,或使用组织内部可解析的权威时间源。
示例命令:
以下命令只作复习,本次训练没有在 VM 上执行:
w32tm /config ` /syncfromflags:manual ` /manualpeerlist:"ntp.aliyun.com,0x8" ` /reliable:yes ` /update
Restart-Service W32Time
w32tm /resync /rediscover
w32tm /query /sourcew32tm /query /statusw32tm /query /peersw32tm /query /configuration原回答中分两行执行 net stop w32time 与 net start w32time 也能工作;在 PowerShell 笔记中使用 Restart-Service W32Time 更直观。还遗漏了重新同步与 /peers、/configuration 验证。
Q12:Web 服务从 Kerberos 回退到 NTLM
**题目:**Web 服务从 Kerberos 回退到 NTLM。如何核对 DNS/KDC、SPN、服务身份、票据、时间、事件日志,并形成复测闭环?
我的回答:
当时提出 SPN 缺失、绑错账户或重复,以及浏览器配置和时间偏差等方向;写了三条检查命令。
**批改:**SPN、浏览器配置和时间偏差等方向正确,但原答只覆盖了部分检查命令,尚缺少从客户端到服务端的验证闭环。下面是完整排查链。
第一步:从实际客户端确认名称与 KDC
Resolve-DnsName testweb.qy.net
Resolve-DnsName -Type SRV "_kerberos._tcp.qy.net"
nltest /dsgetdc:qy.net /KDC /force目的:确认客户端访问名称正确,并能找到可用 KDC。Kerberos 请求的 SPN 与用户实际输入的主机名有关,不能只检查服务器本机名称。
第二步:主动请求目标服务票据
klist get HTTP/testweb.qy.net目的:区分“KDC 无法签发票据”和“已经签发,但应用没有使用或服务端无法验证”。
第三步:查询 SPN 的唯一所有者
setspn -F -Q HTTP/testweb.qy.netsetspn -X -Fsetspn -L QY\svc_testweb预期:HTTP/testweb.qy.net 只注册在实际运行 IIS 应用程序池的账户上。
第四步:核对 IIS 实际运行身份
Invoke-Command -ComputerName TESTWEB -ScriptBlock { Import-Module WebAdministration
Get-ChildItem IIS:\AppPools | Select-Object Name, @{Name="IdentityType";Expression={$_.processModel.identityType}}, @{Name="UserName";Expression={$_.processModel.userName}}}目的:确认文档中写的 QY\svc_testweb 与服务器当前实际配置一致。SPN 在正确名字下但服务使用另一个账户时,服务仍无法解密票据。
同时检查 IIS 是否启用了 Windows Authentication、Negotiate 是否位于 NTLM 之前,以及浏览器是否允许对该站点执行集成 Windows 身份验证。浏览器配置确实可能造成回退,但应在 DNS、SPN 和服务身份核对后,用客户端与 KDC 日志证明,而不是只凭猜测。
第五步:检查时间与票据缓存
w32tm /query /sourcew32tm /query /status
klist修复 DNS、SPN 或服务身份后,再清除当前测试会话的旧票据:
klist purge关闭并重新打开浏览器,重新访问 FQDN。
第六步:检查 KDC 事件
$startTime = (Get-Date).AddMinutes(-30)
Get-WinEvent -FilterHashtable @{ LogName = "Security" Id = 4768,4769,4771,4776 StartTime = $startTime} | Where-Object Message -Match "qianyue|svc_testweb|HTTP/testweb.qy.net" | Select-Object TimeCreated,Id,Message重点:
- 4768:TGT 请求。
- 4769:Kerberos 服务票据请求。
- 4771:预身份验证失败。
- 4776:NTLM 凭据验证,可帮助确认仍在回退。
第七步:形成验证闭环
klist | findstr /i "HTTP/testweb.qy.net"
klist get HTTP/testweb.qy.net最终应同时证明:
- 客户端缓存出现目标 HTTP 服务票据。
- DC 记录成功的 4769。
- 不再为该访问路径持续产生 4776。
- Web 访问正常,服务端没有
KRB_AP_ERR_MODIFIED或解密错误。 - SPN 在全林中唯一,并属于服务实际运行账户。
重点复习:Kerberos 回退排障不能停在
setspn -Q。必须把 DNS/KDC、票据签发、SPN 所有者、服务身份、客户端缓存和事件日志串成闭环。
重点订正:四类共性问题
1. 根据名称猜属性含义
LastLogonDate、LastLogonTimeStamp 和 LastLogon 的区别不在于“日期、时间戳、时间”三种显示形式,而在于属性来源、是否复制以及精度。
2. 把身份状态混成一层
AD 组成员关系、Windows 登录令牌、Kerberos 票据、现有 SMB 会话和资源 ACL 是五种不同状态。更新其中一层,不代表其他层立即刷新。
3. 把一个成功测试当成完整证明
例如 klist get 成功只证明 KDC 能为当前会话签发目标 SPN 的票据,不能证明服务端能够解密、应用正在使用该票据或 ACL 已经授权。
4. 排障流程缺少收尾验证
不少答案能写出前几条检查命令,但没有写复制详情、事件日志、修复动作以及修复后的重复验证。实际工单必须形成闭环。
闭卷追练:从命令记忆到排障判断
随后在聊天中连续练习了命令和故障判断。以下记录的是当时的作答与纠正,不是在 VM 上重新执行后的输出。常用命令已经能较快写出;剩下的主要问题是属性拼写、查询范围,以及把不同层面的状态混为一谈。
一、闭卷命令记录
| 题目 | 当时的作答 | 结果与纠正 |
|---|---|---|
| 90 天未活动用户 | Search-ADAccount -AccountInactive -TimeSpan 90.00:00:00 -UsersOnly | Select-Object Name, SamAccountName, LastLogonDate | ✅ 正确。只适合长期不活跃账户的粗筛,不能直接据此删除。 |
| 已禁用计算机 | Get-ADComputer -Filter 'Enable -eq $false' | Select-Object Name, DNSHostName, DistinguishedName | △ 属性名是 Enabled,不是 Enable。 |
| 用户属于哪些组 | Get-ADPrincipalGroupMembership qianyue | Select-Object Name,GroupScope,GropCategory | △ 命令选对了;字段应写 GroupCategory。qianyue 作为位置参数有效。 |
| 递归列出组成员 | Get-ADGroupMember -Identity 'QYNET-Admin' -Recursive | Select-Object Name, SamAccountName, ObjectClass | ✅ 正确。递归结果是展开后的成员,不是完整的嵌套组结构图。 |
| 查询用户额外属性 | Get-ADUser -Identity 'qianyue' -Properties Department, LastLogonDate | Select-Object Name, SamAccountName, Department, LastLogonDate | ✅ 正确:先用 -Properties 取值,再用 Select-Object 控制显示。 |
| 查已启用的 IT 用户 | Get-ADUser -Filter 'Enabled -eq $true -and Department -eq "it"' | Select-Object Name,SamAccountName,Department | △ 筛选条件正确,但漏了 -Properties Department;否则选中的 Department 列可能为空。 |
| 列出所有 DC 与 GC 状态 | Get-ADDomainController | Select-Object Name, Site, IsGlobalCatalog | △ 少了 -Filter *,不能把不带参数的调用当作“列出所有 DC”。 |
| 纯 PowerShell 查 FSMO | 回答“用 Get-ADForest 查两个、Get-ADDomain 查三个” | ✅ 归属正确;具体字段见下方命令。 |
| 查看某 DC 复制详情 | repadmin /showrepl DC01 | ✅ 正确;需要更详细信息时加 /verbose。 |
| DCDiag 先连通、后 DNS | dcdiag /test:Connectivity,dcdiag /test:dns | ✅ 两条都正确,参数大小写无关。 |
| 查看时间源与状态 | w32tm /query /source,w32tm /query /status | ✅ 两条都正确。 |
| 按 SPN 反查所有者 | setspn -Q HTTP/testweb.qy.net | ✅ 正确。需要明确查整林时,再考虑 -F 范围。 |
| 安全添加 SPN | 选 -S,说明它会查重;没有写完整命令 | ✅ 概念正确;完整写法:setspn -S HTTP/testweb.qy.net svc_testweb。 |
| 查重复 SPN | setspn -X | ✅ 正确;是否要扩展到全林取决于查询范围。 |
| 复制失败摘要,只看错误 | repadmin /replsummary /errorsonly | ✅ 正确。 |
命令口诀:
-Filter决定找哪些对象;-Properties决定额外取回哪些属性;Select-Object决定最终显示哪些列。属性名记不清时,可先把对象保存到变量,用Get-Member -MemberType Properties或Format-List *核对,不需要硬猜。
完整的 IT 部门筛选命令:
Get-ADUser -Filter 'Enabled -eq $true -and Department -eq "IT"' ` -Properties Department | Select-Object Name, SamAccountName, Department纯 PowerShell 查询五个 FSMO 角色:
Get-ADForest | Select-Object SchemaMaster, DomainNamingMasterGet-ADDomain | Select-Object PDCEmulator, RIDMaster, InfrastructureMaster二、概念与故障题记录
| 场景 | 当时的思路 | 复盘要点 |
|---|---|---|
| 刚加组却访问共享被拒绝 | 提出 SPN、Kerberos、ACL;用 setspn -Q、klist 排查 | △ 第一步漏了当前登录令牌。先核对 AD 成员关系、组是否为 Security,再在客户端用 whoami /groups;最后核对共享权限和 NTFS ACL。出现认证错误线索时才深入 SPN。 |
DC 的 IsGlobalCatalog=False | 不是故障;该 DC 仍可服务本域,不能提供 GC 的跨域搜索 | ✅ 基本正确。多域林中还要考虑通用组成员关系和可用 GC。 |
| FSMO 的五个角色 | 林级:架构、域命名;域级:PDC、RID、基础结构 | ✅ 全对。 |
| 在线 DC 正常退役 | 选择 transfer | ✅ 正确。先验证目标 DC 与复制,再转移、核验角色、正常降级;不要直接删除 VM。 |
| 复制报 1722 | 先查 DNS 解析与 IP 连通;随后想到 LDAP 和 SMB | △ 1722 要优先想到 RPC:DNS → 网络 → TCP 135 → 动态 RPC 端口/防火墙/服务。LDAP 与 SMB 在对应故障中再查;Ping 通也不能证明 RPC 通。 |
根域 PDC 时间源是 Local CMOS Clock | 表示本机时钟;正式环境应对接权威 NTP | ✅ 方向正确。它表示当前使用本机时钟,不能仅凭名称断言硬件时钟正在可靠校准。 |
入组后 klist purge 仍无权限 | 应注销或重启,让“Windows 凭据同步” | △ 处理方向对,但原因是重新登录才能重建包含新组 SID 的访问令牌;不是“凭据同步”。通常注销重登即可,不必重启。 |
| 成员机比 DC 快 12 分钟 | 怀疑 Kerberos 时间偏差;用 w32tm /query /source 查时间源 | ✅ 正确。这里是票据验证的时间偏差,不等于密码错误。 |
| 用通讯组给文件夹授权 | 指出应使用 Security,不是 Distribution | ✅ 正确。GroupCategory 必须核对。 |
| 组作用域与 AGDLP | 知道 DomainLocal 对本域资源授权、Global 组织本域用户;应用题开头一度写反,随后自行改正 | △ 固定链条:用户 → Global → DomainLocal → 资源权限。新员工只加入 Global,已有 ACL 不用修改。 |
replsummary 正常,但 DC02 暂时查不到 DC01 新建的用户 | 不会立刻全林强制同步;注意多站点链路压力,业务紧急时需处理 | ✅ 风险意识很好;仍应先核对对象、查询的 DC、分区、复制方向和站点链路,再决定是否做最小范围复制。 |
共享权限题可以用这一条链复述:
AD 组成员关系 → 当前登录令牌(whoami /groups) → 共享权限(Get-SmbShareAccess) → NTFS ACL(Get-Acl)klist purge 只清 Kerberos 票据,不会重建当前桌面登录会话的访问令牌。登录后才加入新组时,先注销重登,再检查 whoami /groups。现有 SMB 连接也可能需要关闭并重连。
三、本次压轴:多站点复制不能“一键全推”
repadmin /replsummary 没有失败,只说明当前摘要没有发现复制错误,不保证新对象已经到达每一台 DC。尤其多站点可能有复制计划与链路成本。不要因某台 DC 暂时查不到用户,就直接执行:
repadmin /syncall /AdeP这里 /A 涉及所有命名上下文,/d 使用 DN 标识,/e 把范围扩展到跨站点,/P 使用推送方向。组合执行可能显著增加站点间流量,但不应机械地说“必然压满链路”。业务着急也应先定位,再选最小范围。
建议先明确对两台 DC 查询,而不是依赖当前默认 DC:
$newUserSam = "newuser" # 改成刚创建的用户登录名
Get-ADUser -Identity $newUserSam -Server DC01Get-ADUser -Identity $newUserSam -Server DC02
repadmin /showrepl DC02如果确认对象在 DC01,且需要让 DC02 立即取得 DC=qy,DC=net 分区的变化,再评估是否针对性复制:
# 目标 DC 在前,源 DC 在后repadmin /replicate DC02 DC01 "DC=qy,DC=net"重点复习:先定位对象和复制方向,再选最小范围;
/syncall /AdeP不是日常“刷新按钮”。
下次开场先闭卷复述的十三句话
不看答案,尝试口述下面十三句话:
LastLogonDate是lastLogonTimestamp的易读转换。LastLogon不复制,所以精确查询要遍历所有 DC 并取最大值。Get-SmbSession不是共享 ACL;共享 ACL 使用Get-SmbShareAccess。- Ping 使用 ICMP,没有所谓“Ping 端口”。
- LUID 标识本机登录会话,不是 SID 或 ObjectGUID。
klist get成功不证明服务能解密票据或 ACL 已授权。- 默认只有林根域 PDC Emulator 对接外部权威时间源。
- Kerberos 回退要检查 DNS、KDC、SPN、服务身份、票据与事件日志。
-Filter找对象,-Properties取额外字段,Select-Object控制输出。- 刚加组却无权限:先查登录令牌,再查共享权限与 NTFS ACL。
- 1722:DNS → 网络 → RPC 135 → 动态 RPC 端口与服务。
- AGDLP:用户 → Global → DomainLocal → 资源权限。
- 多站点复制先选最小范围;
/e跨站点、/P推送,不要无差别使用/syncall /AdeP。
重要问题库:Windows AD 重要问题库
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!













