遇到要確認某個子網域 AD 帳號是否被鎖定的情境,使用 Get-ADUser PowerShell 指令查詢踩到小地雷,事後查了資料搞清始末,整理成筆記備忘。

查詢特定 AD 帳號的狀態,我慣用的做法是 PowerShell Get-ADUser 指令,好處是操作快速簡捷,不需管理權限,在任何網域所屬主機都可以執行(但要安裝 RSAT),甚至可加上 -Server 指定 GC 伺服器 IP 及 3268 Port,查詢 Forest 子網域下的帳號。(延伸閱讀:AD 帳號問題快篩工具PowerShell / C# 跨網域搜尋 AD 帳號)

如果聚焦帳號是否被鎖定,查詢時可加上 -Properties lockedOut,lockoutTime 參數,由 LockedOut True/False 及 lockTimeout 兩個值綜合判斷是否被鎖定:

Get-ADUser <SamAccountName> -Properties lockedOut,lockoutTime

理論上看 LockedOut True 代表鎖定、False 等於沒被鎖就夠了,何需多檢查 lockoutTime (被鎖定時間)? 這就是我這次踩的雷,誤判帳號狀態導致查錯方向。

如果你是使用 -Server <GC-IP>:3268 透過 GC 查詢資料,查到的 LockedOut 狀態將永遠是 False。原因是 AD 資料中的 Loclkout-Time 屬性 System-Flags 值為 0x00000010,被標示為「不複製到 Global Catalog」,而判斷帳戶是否鎖定中的依據要靠 lockoutTimeout + LockoutDuration (鎖定期間可使用 (Get-ADDefaultDomainPasswordPolicy).LockoutDuration 查詢),缺乏 lockoutTimeout 值時,LockedOut 永遠為 False。

用以下範例說明:

  1. 當 fox.mulder 帳號處於帳定狀況,透過 GC 查詢 Get-ADUser fox.mulder -Server 192.168.1.1:3268 -Properties lockoutTime,LockedOut 的結果沒有 lockoutTime,而 LockedOut 為 False
  2. 改查詢本地 DC Get-ADUser fox.mulder -Properties lockoutTime,LockedOut 才能看到 lockoutTime,而 LockedOut 為 True
  3. 解鎖後,lockoutTime 為 0,LockedOut 變成 False


Comments

Be the first to post a comment

Post a comment