Temukan akun yang terkunci di Direktori Aktif (cara yang benar-benar berfungsi!)

8

Saya telah mencari di Google cara mendaftar akun yang terkunci dan sejauh ini menemukan dua metode, yang keduanya tidak berfungsi ...

Permintaan tersimpan - (&(&(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))))

Daftar sejumlah akun, banyak di antaranya tidak dikunci. Jika saya membuka kunci yang kebetulan saya tahu terkunci, itu masih akan dikembalikan oleh permintaan.

Perintah Powershell - Search-ADAccount -LockedOut

Tidak melakukan apa-apa.

Jadi - Apakah saya melakukan sesuatu yang salah? Atau - Apakah ada metode yang benar-benar berfungsi?

MrVimes
sumber
Hanya sebuah catatan kecil: Untuk mengelola domain dengan perintah yang termasuk dalam modul AD PowerShell (termasuk penggunaan Searchlet-ADAccount commandlet), Anda harus memiliki layanan Active Directory Web Services (ADWS) harus diinstal pada setidaknya satu pengontrol domain di domain ini. Tapi saya kira ini bukan masalah karena jika Anda belum ADWS misalnya Anda mendapatkan pesan kesalahan memberitahukan tentang hal itu.
Mikhail

Jawaban:

11

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-PDCEdan 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 -LockedOutsedang 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>=1pendekatan 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.

Ryan Ries
sumber
Saya akan tertarik untuk menemukan dokumentasi kapan userAccountControlbit itu berhenti valid. Dulu bekerja dengan baik, jika memori berfungsi. Itu membuat saya bertanya-tanya apakah fungsionalitas dihapus dalam revisi nanti dari kode AD. Hmm ...
Evan Anderson
Ya saya benci untuk terus memohon otoritas, tetapi Richard Mueller mengatakan itu tidak bekerja sejak Windows 2000.
Ryan Ries
Saya menduga itu berfungsi di Windows 2000 ketika ada Windows NT 4.0 Domain Controllers hadir, karena itu harus ada di sana untuk memfasilitasi replikasi ke DC yang memiliki SAM. Saya tidak memiliki lingkungan pengujian yang diputar untuk NT 4.0 lagi (saya menghapus semua VM lama itu) tetapi saya pasti akan mencobanya. Ada akan memiliki menjadi cara untuk SAM-satunya DC untuk dapat menyadari akun lockout-- itulah satu-satunya cara yang saya bisa melihatnya bekerja.
Evan Anderson
@EvenAnderson Saya dengan sepenuh hati mendukung penelitian Anda dan dengan antusias menunggu hasil tes Anda. :)
Ryan Ries