トップ回答者
アカウントの期限が設定されたユーザをクエリの定義でリスト化するには

質問
回答
-
チャブーンです。
MSFT 大久保さんから回答いただいているよう、ご要望を簡単に解決する方法は、ADSI を使って accountExpires か accountExpirationDate プロパティを引き出してソートする、ということですね。
MS 経由のサンプルなら、Scripting Guy! がありますかね。まあかっちりした答えがでてるので、いまさら、かもしれませんが。
一応細かいコメントですが、ADUC (管理スナップイン) の中身(プロパティ画面やコンテキストメニュー動作)をいじるためには、基本的に COM ベースで新規に開発し Display Specifier オブジェクトに UI 登録する必要があります。COM での開発ができない場合 VBScript でもできなくはないですが、もちろん UI も wscript.exe ベースです。
その意味では、一番簡単なのは uet user [ユーザ名] /domain コマンドかもしれませんね。パイプラインで findstr コマンドと上手に組み合わせれば、特定ユーザの、アカウント期限の表示は簡単にできます。
net user <username> /domain|findstr "名 アカウントの期限"
さらに for /F コマンドと組み合わせてバッチを書けば(ちょっと知恵がいりますが)、リストにするところまではできるでしょう。ソートはバッチでは難しいですけれども。
追加:
ADUC からクエリを定義して使いたい、ということですが、カスタムクエリを定義することで、検索抽出自体は可能です。
(&(objectCategory=person)(objectClass=user)(accountExpires>=128813436000000000))
たとえばうえはユーザオブジェクトのaccountExpires属性が 2009/03/13 以上という LDAP クエリです。条件が合えば、アカウントが検索に表示されます。ただし、日付そのものは検索クエリ上で表示することはできません(UIがないので)。またaccountExpires属性の値を算出して指定する必要がありますね。- 編集済み チャブーンMVP, Moderator 2009年3月13日 14:49 クエリに関する内容の追加・修正
- 回答としてマーク 宏 2009年3月23日 2:45
すべての返信
-
こんにちは、フォーラムオペレータ大久保です。
こんなのではいかがでしょうか?(MS以外のサイトで申し訳ありません)
期限切れのユーザーアカウント一覧の作成
http://pwp1.atcms.jp/mokurin/index.php?ADSI%2F%A5%E6%A1%BC%A5%B6%A1%BC#h1eef6a2
参考になれば。
マイクロソフト株式会社 フォーラム オペレータ 大久保 直美- 回答の候補に設定 チャブーンMVP, Moderator 2009年3月13日 14:50
-
チャブーンです。
MSFT 大久保さんから回答いただいているよう、ご要望を簡単に解決する方法は、ADSI を使って accountExpires か accountExpirationDate プロパティを引き出してソートする、ということですね。
MS 経由のサンプルなら、Scripting Guy! がありますかね。まあかっちりした答えがでてるので、いまさら、かもしれませんが。
一応細かいコメントですが、ADUC (管理スナップイン) の中身(プロパティ画面やコンテキストメニュー動作)をいじるためには、基本的に COM ベースで新規に開発し Display Specifier オブジェクトに UI 登録する必要があります。COM での開発ができない場合 VBScript でもできなくはないですが、もちろん UI も wscript.exe ベースです。
その意味では、一番簡単なのは uet user [ユーザ名] /domain コマンドかもしれませんね。パイプラインで findstr コマンドと上手に組み合わせれば、特定ユーザの、アカウント期限の表示は簡単にできます。
net user <username> /domain|findstr "名 アカウントの期限"
さらに for /F コマンドと組み合わせてバッチを書けば(ちょっと知恵がいりますが)、リストにするところまではできるでしょう。ソートはバッチでは難しいですけれども。
追加:
ADUC からクエリを定義して使いたい、ということですが、カスタムクエリを定義することで、検索抽出自体は可能です。
(&(objectCategory=person)(objectClass=user)(accountExpires>=128813436000000000))
たとえばうえはユーザオブジェクトのaccountExpires属性が 2009/03/13 以上という LDAP クエリです。条件が合えば、アカウントが検索に表示されます。ただし、日付そのものは検索クエリ上で表示することはできません(UIがないので)。またaccountExpires属性の値を算出して指定する必要がありますね。- 編集済み チャブーンMVP, Moderator 2009年3月13日 14:49 クエリに関する内容の追加・修正
- 回答としてマーク 宏 2009年3月23日 2:45
-
とてもわかりやすい回答で、とても助かりました。
ありがとうございます。
バッチリとリスト化できました。
使用例としては、こんな感じになりますね。
・次の条件にあてはまるユーザをリストにする。
条件1:アカウントが有効になっている。
条件2:2009/03/31~2009/04/01にアカウントが有効期限となる。
(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(accountExpires>=128829852000000000)(accountExpires<=128831580000000000)))
条件2:2009/03/30以前にアカウントが有効期限となる。
(&(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)(accountExpires>=1)(accountExpires<=128828988000000000)))
これなら、期限を表示できなくても、知りたい期限でリスト化できるので、即時応答できる上、次の案内対象のリストまで完成します。
バッチリ活用させていただきます。
返信が遅くなってスミマセンでした。
クエリの値が1601/01/02 00:00:00からという発見と算出のころで、少々時間がかかってしまいました。