Active Directoryでロックアウトされたアカウントを見つける(実際に機能する方法!)


8

ロックアウトされたアカウントを一覧表示する方法をグーグル検索して、これまでに2つの方法が見つかりましたが、どちらも機能しません...

保存されたクエリ- (&(&(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))))

いくつかのアカウントを一覧表示します。その多くはロックアウトされていません。たまたまロックを解除した場合、ロックアウトされても、クエリから返されます。

Powershellコマンド- Search-ADAccount -LockedOut

何もしません。

だからどちらか-私は何か間違っているのですか?または-実際に機能する方法はありますか?


ちょっとしたメモ:AD PowerShellモジュールに含まれるコマンド(Search-ADAccountコマンドレットの使用を含む)でドメインを管理するには、このドメインの少なくとも1つのドメインコントローラーにActive Directory Webサービス(ADWS)サービスをインストールする必要があります。しかし、ADWSインスタンスがない場合は、それを通知するエラーメッセージが表示されるため、これは問題ではないと思います。
ミハイル、

回答:


11

Get-ADUser -LDAPFilter "(&(objectCategory=Person)(objectClass=User)(lockoutTime>=1))" -Properties LockedOut信頼できる結果が返されないので、必ずしも信頼する必要はありませんが、現時点ではPDCeに直接連絡することもできません。最良の結果を得るには、ドメイン全体のアカウントロックアウトに関する最新の情報が常に含まれているPDCエミュレータを直接ターゲットにすることをお勧めします。

これが、レプリケーションの遅延が発生していることを確認しているところです。

...アカウントロックアウトは、プライマリドメインコントローラー(PDC)エミュレーターの役割の所有者に緊急に複製され、次に以下に緊急に複製されます。

?PDCエミュレータと同じサイトにある同じドメイン内のドメインコントローラ。

?アカウントロックアウトを処理したドメインコントローラと同じサイトにある同じドメイン内のドメインコントローラ。

•PDCエミュレーターを含むサイトまたはアカウントのロックアウトが処理されたサイトとのサイト間の変更通知(したがって、緊急の複製)を許可するように構成されたサイトにある同じドメイン内のドメインコントローラー。これらのサイトには、PDCエミュレーターを含むサイトと同じサイトリンク、またはアカウントロックアウトを処理したドメインコントローラーを含むサイトと同じサイトリンクに含まれているサイトが含まれます。

さらに、PDCエミュレーター以外のドメインコントローラーで認証が失敗した場合、認証はPDCエミュレーターで再試行されます。このため、不正なパスワードを試行するしきい値に達した場合、PDCエミュレータは、失敗したパスワードの試行を処理したドメインコントローラの前にアカウントをロックします。PDCエミュレーターの役割の所有者がパスワードの変更とアカウントのロックアウトを管理する方法の詳細については、このドキュメントの「柔軟な単一マスター操作の管理」を参照してください。

だからSearch-ADAccount -LockedOut -Server DC-PDCE、あなたの結果がもっと良いかどうか試してみてください。

また、lockoutTime属性の周りにクエリを構築する際に考慮すべき点が他にもあります。

この属性値は、アカウントが正常にログオンしたときにのみリセットされます。つまり、この値はゼロ以外の値である可能性がありますが、アカウントはロックアウトされていません。アカウントがロックアウトされているかどうかを正確に判断するには、この時間にLockout-Durationを追加し、結果を現在の時間と比較して、ローカルタイムゾーンと夏時間を考慮する必要があります。

編集:リバースエンジニアリングの方法でMicrosoft.ActiveDirectory.Management.dllSearch-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 -LockedOut、AccountLockoutTime属性も調べているようです。

正義のためにさらに編集してください: 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が過去$(ドメインのロックアウト期間)分を超えているユーザーのみを含める必要があります。


そのuserAccountControlビットが有効でなくなったときのドキュメントを見つけることに興味があります。記憶が機能すれば、以前はうまく機能していました。ADコードの今後のリビジョンで機能が削除されたのではないでしょうか。うーん...
エヴァン・アンダーソン

さて、私は当局に訴え続けることを憎むが、リチャード・ミュラーは、それがWindowsの2000年から働いていないと言う
ライアン・リース

SAMを備えたDCへの複製を容易にするためにWindows NT 4.0ドメインコントローラが存在する必要があるため、Windows 2000で動作すると思われます。NT 4.0用にスピンアップしたテスト環境はもうありません(古いVMをすべて削除しました)が、間違いなく試してみるつもりです。SAMのみのDCがアカウントのロックアウトを認識できるようにする方法がなければなりません。それが、それが機能していることを確認できる唯一の方法です。
エヴァンアンダーソン

@EvenAnderson私は心からあなたの研究をサポートし、熱心にあなたのテスト結果を待っています。:)
ライアンリース2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.