Tôi cũng không nhất thiết phải tin tưởng Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut
, vì nó cũng không trả lại kết quả đáng tin cậy cho tôi, nhưng sau đó, tôi cũng không thể liên hệ trực tiếp với PDCe của mình vào lúc này. Để có kết quả tốt nhất, bạn sẽ muốn nhắm mục tiêu trực tiếp vào trình giả lập PDC của mình, vì nó luôn có thông tin cập nhật nhất về việc khóa tài khoản trên toàn miền.
Đó là điều tôi đang đặt cược rằng bạn đang chứng kiến ở đây là một sự chậm trễ trong việc nhân rộng:
... khóa tài khoản được nhân rộng khẩn cấp sang chủ sở hữu vai trò giả lập bộ điều khiển miền chính (PDC) và sau đó được nhân rộng khẩn cấp như sau:
• Bộ điều khiển miền trong cùng một miền được đặt trong cùng một trang với trình giả lập PDC.
• Bộ điều khiển miền trong cùng một miền được đặt trong cùng một trang với bộ điều khiển miền đã xử lý khóa tài khoản.
• Bộ điều khiển miền trong cùng một miền được đặt trong các trang web đã được định cấu hình để cho phép thông báo thay đổi giữa các trang web (và do đó, sao chép khẩn cấp) với trang web chứa trình giả lập PDC hoặc với trang web nơi khóa tài khoản được xử lý. Các trang web này bao gồm bất kỳ trang web nào được bao gồm trong cùng một liên kết trang web với trang web chứa trình giả lập PDC hoặc trong cùng một liên kết trang web với trang web chứa bộ điều khiển miền đã xử lý khóa tài khoản.
Ngoài ra, khi xác thực thất bại tại bộ điều khiển miền khác với trình giả lập PDC, xác thực được thử lại tại trình giả lập PDC. Vì lý do này, trình giả lập PDC khóa tài khoản trước bộ điều khiển miền đã xử lý việc thử mật khẩu không thành công nếu đạt đến ngưỡng thử mật khẩu xấu. Để biết thêm thông tin về cách chủ sở hữu vai trò giả lập PDC quản lý thay đổi mật khẩu và khóa tài khoản, hãy xem "Quản lý hoạt động của một chủ nhân linh hoạt" trong cuốn sách này.
Vì vậy, hãy thử Search-ADAccount -LockedOut -Server DC-PDCE
và xem nếu kết quả của bạn là tốt hơn.
Ngoài ra, đây là một cái gì đó khác để xem xét khi xây dựng các truy vấn xung quanh thuộc tính lockoutTime:
Giá trị thuộc tính này chỉ được đặt lại khi tài khoản được đăng nhập thành công. Điều này có nghĩa là giá trị này có thể khác không, nhưng tài khoản không bị khóa. Để xác định chính xác nếu tài khoản bị khóa, bạn phải thêm Thời lượng khóa vào thời điểm này và so sánh kết quả với thời gian hiện tại, chiếm các múi giờ địa phương và thời gian tiết kiệm ánh sáng ban ngày.
Chỉnh sửa: Bằng cách kỹ thuật đảo ngược Microsoft.ActiveDirectory.Management.dll
, tôi có thể nói với bạn rằng Search-ADAccount -LockedOut
, dường như tôi tạo ra kết quả khá đáng tin cậy, chạy mã sau:
else if ((bool) this._paramSet.LockedOut)
{
list.Add(ADAccountFactory<ADAccount>.AttributeTable[cmdletSessionInfo.ConnectedADServerType]["AccountLockoutTime"].InvokeToSearcherConverter(ADOPathUtil.CreateFilterClause(ADOperator.Ge, "AccountLockoutTime", (object) 1), cmdletSessionInfo));
this.OutputFilterFunction = new ADGetCmdletBase<SearchADAccountParameterSet, ADAccountFactory<ADAccount>, ADAccount>.OutputFilterDelegate(this.FilterIsLockedOut);
}
if (list.Count > 0)
this.OutputSearchResults(list.Count != 1 ? ADOPathUtil.CreateAndClause(list.ToArray()) : list[0]);
else
this.OutputSearchResults((IADOPathNode) null);
Vì vậy, có vẻ như Search-ADAccount -LockedOut
cũng đang xem thuộc tính AccountLockoutTime!
Chỉnh sửa một số chi tiết cho công lý vĩ đại: Richard Mueller, Dir. Dịch vụ MVP, cho biết điều này:
Bạn không thể sử dụng thuộc tính userAccountControl để xác định người dùng bị khóa. Có một chút userAccountControl được ghi lại cho điều này, nhưng nó không được sử dụng.
Tôi có thể xác minh điều này như vậy:
PS C:\Users\ryan> $(Search-ADAccount -LockedOut).Count
11
PS C:\Users\ryan> $(Get-ADUser -LDAPFilter "(&(objectCategory=User)(userAccountControl:1.2.840.113556.1.4.803:=16))").Count
0
Cuối cùng, tôi muốn kết thúc bài viết trên blog về chủ đề này , điều này giải thích tại sao giải lockoutTime>=1
pháp này lại tiếp cận giải pháp tốt nhất, nhưng đó chỉ là một phần của câu chuyện. Bạn cần lọc thêm danh sách để chỉ bao gồm những người dùng có thời gian khóa của họ lớn hơn $ (thời gian khóa tên miền của bạn) trong quá khứ.