Saya tidak perlu percaya Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut
, karena tidak mengembalikan hasil yang dapat diandalkan untuk saya juga, tetapi kemudian, saya juga tidak dapat langsung menghubungi PDCe saya saat ini. Untuk hasil terbaik, Anda ingin langsung menargetkan emulator-PDC Anda, karena selalu memiliki informasi terbaru tentang penguncian akun di seluruh domain.
Itulah yang saya bertaruh bahwa Anda saksikan di sini adalah keterlambatan dalam replikasi:
... penguncian akun segera direplikasi ke pemilik peran emulator pengendali domain primer (PDC) dan kemudian segera direplikasi sebagai berikut:
• Pengontrol domain dalam domain yang sama yang terletak di situs yang sama dengan emulator PDC.
• Pengontrol domain di domain yang sama yang terletak di situs yang sama dengan pengontrol domain yang menangani penguncian akun.
• Pengontrol domain dalam domain yang sama yang terletak di situs yang telah dikonfigurasi untuk memungkinkan pemberitahuan perubahan antara situs (dan, karenanya, replikasi mendesak) dengan situs yang berisi emulator PDC atau dengan situs tempat penguncian akun ditangani. Situs-situs ini termasuk situs yang termasuk dalam tautan situs yang sama dengan situs yang berisi emulator PDC atau di tautan situs yang sama dengan situs yang berisi pengontrol domain yang menangani penguncian akun.
Selain itu, ketika otentikasi gagal pada pengontrol domain selain emulator PDC, otentikasi tersebut dicoba lagi di emulator PDC. Untuk alasan ini, emulator PDC mengunci akun sebelum pengontrol domain yang menangani upaya kata sandi gagal jika ambang upaya kata sandi buruk tercapai. Untuk informasi lebih lanjut tentang bagaimana pemilik peran emulator PDC mengelola perubahan kata sandi dan penguncian akun, lihat "Mengelola Operasi Single-Master Fleksibel" di buku ini.
Jadi coba Search-ADAccount -LockedOut -Server DC-PDCE
dan lihat apakah hasil Anda lebih baik.
Juga, ada hal lain yang perlu dipertimbangkan ketika membangun kueri di sekitar atribut lockoutTime:
Nilai atribut ini hanya diatur ulang ketika akun berhasil masuk. Ini berarti bahwa nilai ini mungkin bukan nol, namun akun tidak dikunci. Untuk secara akurat menentukan apakah akun dikunci, Anda harus menambahkan Lockout-Duration untuk waktu ini dan membandingkan hasilnya dengan waktu saat ini, memperhitungkan zona waktu lokal dan waktu musim panas.
Sunting: Dengan cara rekayasa terbalik Microsoft.ActiveDirectory.Management.dll
, saya dapat memberi tahu Anda bahwa Search-ADAccount -LockedOut
, yang menurut saya menghasilkan hasil yang cukup andal, menjalankan kode berikut:
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);
Jadi nampaknya Search-ADAccount -LockedOut
sedang melihat atribut AccountLockoutTime juga!
Sunting lagi untuk keadilan yang luar biasa: Richard Mueller, Dir. Layanan MVP, mengatakan ini:
Anda tidak dapat menggunakan atribut userAccountControl untuk mengidentifikasi pengguna yang dikunci. Ada sedikit userAccountControl yang didokumentasikan untuk ini, tetapi tidak digunakan.
Saya dapat memverifikasi ini sebagai berikut:
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
Akhirnya, saya ingin mengakhiri posting blog ini tentang topik , yang menjelaskan mengapa lockoutTime>=1
pendekatan ini mendekati solusi terbaik, tetapi itu hanya sebagian dari cerita. Anda perlu lebih lanjut menyaring daftar untuk memasukkan hanya pengguna di mana lockoutTime mereka lebih besar dari $ (durasi penguncian domain Anda) menit di masa lalu.