【IDM】最近ログオンしていないユーザーを検索する とっても簡単な方法

いまさらながら、ADでは「ログオン可能なワークステーション(userWorkstation属性)」の設定が最大1024文字だと気づき、自分の無知に愕然としています。だって…NTのころは4台固定だったんだもの…。

https://support.microsoft.com/kb/938458

さて、話は変わりますが、VBScript を使用して Active Directory 内のユーザーを検索しようと思った時、面倒だなと感じるのが、以下のような条件です。

  • 既に無効化されたアカウント
  • 既に有効期限の切れたアカウント
  • ロックされたアカウント
  • パスワードの有効期限が切れているアカウント
  • パスワードが無期限に設定されているアカウント
  • 指定した日付までに有効期限が切れるアカウント
  • 最近ログオンしていないアカウント

上の条件を見て、頭の中に使用する属性名が思い浮かんだ方は、完全にADマニアです。もちろんほめ言葉です。

Windows PowerShell のActive Directory Module には、上記のような特定条件検索専用のコマンドレットが用意されています。その名も、Search-ADAccount です。

上記の条件と、Search-ADAccount のパラメタとの対応を以下に示します。-UsersOnly パラメタを使用すると、ユーザーアカウントのみに限定して結果を表示してくれます。

既に無効化されたアカウント Search-ADAccount –AccountDisabled -UsersOnly
既に有効期限の切れたアカウント Search-ADAccount –AccountExpired -UsersOnly
ロックされたアカウント Search-ADAccount –LockedOut -UsersOnly
パスワードの有効期限が切れているアカウント Search-ADAccount –PasswordExpired -UsersOnly
パスワードが無期限に設定されているアカウント Search-ADAccount –PasswordNeverExpires -UsersOnly
指定した日付で有効期限が切れるアカウント Search-ADAccount –AccountExpiring –Datetime “DD/MM/YYYY” -UsersOnly
指定した日数以内に有効期限が切れるアカウント Search-ADAccount –AccountExpiring –Timespan <日数> -UsersOnly
指定した日数以上ログオンしていないアカウント Search-ADAccount –AccountInactive –Timespan <日数> -UsersOnly ※2003ドメイン機能レベル以上
指定した日付以降一度もログオンしていないアカウント Search-ADAccount –AccountInavtive –Datetime “MM/DD/YYYY” -UsersOnly ※2003ドメイン機能レベル以上

例えば、ここ1年のあいだログオンしていないユーザーを検索するには、以下のように入力します。

PS C:\> Search-ADAccount -AccountInactive -TimeSpan 365

ただし!注意があります。

上記の検索結果には、1秒前に作ったユーザー(当然、一度もログオンしていない)も含まれてしまいます。よって、以下のように、Search-ADAccount の出力結果をベースに、アカウントの作成日時(WhenCreated)属性をチェックしたほうがよいです。

以下の例では、2009年11月18日 17時以前に作成したアカウントのみを検索結果として出力しています。

Search-ADAccount –AccountInactive –TimeSpan 365
| Foreach-Object {(Get-ADUser $_Name –Properties WhenCreated)}
| Where-Object {$_.WhenCreated –lt “2009/11/18 17:00:00”}

(参考)

TechNet  Sarch-ADAccount の解説
https://technet.microsoft.com/ja-jp/library/ee617247(en-us).aspx

TechNet  最近ログオンしていないユーザーを検索する
https://technet.microsoft.com/ja-jp/library/dd391899(WS.10).aspx