Active Directory에서 잠긴 계정 찾기 (실제로 작동하는 방식) 작동하지 않는 두 가지 방법을 발견했습니다

잠긴 계정을 나열하는 방법을 googled하고 지금까지 두 가지 방법이 작동하지 않는 두 가지 방법을 발견했습니다 …

저장된 검색어- (&(&(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))))

많은 계정이 나열되어 있으며 많은 계정이 잠겨 있지 않습니다. 내가 알고있는 것을 잠금 해제하면 여전히 쿼리에 의해 반환됩니다.

Powershell 명령- Search-ADAccount -LockedOut

아무것도하지 않습니다.

둘 중 하나-내가 뭔가 잘못하고 있습니까? 또는-실제로 작동하는 방법이 있습니까?



답변

Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut신뢰할 수있는 결과를 반환하지 않기 때문에 반드시 신뢰할 필요 는 없지만 현재로서는 내 PDCe에 직접 연결할 수 없습니다. 최상의 결과를 얻으려면 도메인 전체의 계정 잠금에 대한 최신 정보가 항상 있으므로 PDC 에뮬레이터를 직접 대상으로하고자합니다.

이것이 여러분이 여기서 목격하고있는 것입니다. 복제가 지연됩니다.

… 계정 잠금이 PDC (Primary Domain Controller) 에뮬레이터 역할 소유자에게 긴급하게 복제 된 후 다음으로 긴급하게 복제됩니다.

• PDC 에뮬레이터와 동일한 사이트에있는 동일한 도메인의 도메인 컨트롤러.

• 계정 잠금을 처리 한 도메인 컨트롤러와 동일한 사이트에있는 동일한 도메인의 도메인 컨트롤러.

• PDC 에뮬레이터가 포함 된 사이트 또는 계정 잠금이 처리 된 사이트와 사이트간에 변경 알림을 허용하도록 구성된 사이트 (및 긴급 복제)에있는 동일한 도메인의 도메인 컨트롤러. 이러한 사이트에는 PDC 에뮬레이터가 포함 된 사이트와 동일한 사이트 링크 또는 계정 잠금을 처리 한 도메인 컨트롤러가있는 사이트와 동일한 사이트 링크에 ​​포함 된 모든 사이트가 포함됩니다.

또한 PDC 에뮬레이터 이외의 도메인 컨트롤러에서 인증이 실패하면 PDC 에뮬레이터에서 인증이 다시 시도됩니다. 이러한 이유로 PDC 에뮬레이터는 잘못된 암호 시도 임계 값에 도달하면 실패한 암호 시도를 처리 한 도메인 컨트롤러 전에 계정을 잠급니다. PDC 에뮬레이터 역할 소유자가 암호 변경 및 계정 잠금을 관리하는 방법에 대한 자세한 내용은이 설명서의 “유연한 단일 마스터 작업 관리”를 참조하십시오.

따라서 Search-ADAccount -LockedOut -Server DC-PDCE결과가 더 나은지 확인하십시오.

또한 lockoutTime 속성 주위에 쿼리를 작성할 때 고려해야 할 사항이 있습니다.

이 속성 값은 계정이 성공적으로 로그온 한 경우에만 재설정됩니다. 즉,이 값은 0이 아닐 수 있지만 계정은 잠기지 않습니다. 계정이 잠겨 있는지 정확하게 확인하려면이 시간에 잠금 기간을 추가하고 결과를 현재 시간과 비교하여 현지 시간대와 일광 절약 시간을 고려해야합니다.

편집 : 리버스 엔지니어링 을 통해 신뢰할 수있는 결과를 생성하는 것처럼 보이는 다음 코드를 실행 Microsoft.ActiveDirectory.Management.dll한다고 말할 수 Search-ADAccount -LockedOut있습니다.

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);

그래서 Search-ADAccount -LockedOutAccountLockoutTime 속성도보고있는 것처럼 보입니다 !

위대한 정의를 위해 좀 더 편집하십시오 : Richard Mueller, Dir. 서비스 MVP는 다음과 같이 말합니다.

userAccountControl 속성을 사용하여 잠긴 사용자를 식별 할 수 없습니다. 이에 대해 문서화 된 약간의 userAccountControl이 있지만 사용되지는 않습니다.

따라서 이것을 확인할 수 있습니다.

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

마지막으로 주제에 대한 이 블로그 게시물 을 끝내고 싶습니다. 왜 이것이 lockoutTime>=1최고의 솔루션에 접근하고 있는지 설명 하지만, 이는 이야기의 일부일뿐입니다. lockoutTime이 과거 $ (도메인 잠금 기간)보다 큰 사용자 만 포함하도록 목록을 추가로 필터링해야합니다.