2012年10月21日日曜日

Active Directoryに参加させたコンピュータアカウントを調べる方法(とカウントを減らす方法)

あまり知られていないかもしれませんが(自分も最近知った)、一般ユーザがActive Directoryに参加させることができるコンピュータの数は、デフォルトで10台までに制限されています。

検索してみると、この制限が発生する仕組みや解除方法についてはあちこちに情報がある(たとえばIT Proの記事)のですが、

  1. 上限に達した時の対処方法(制限を解除するのではなく参加させた台数のカウントを減らす方法)
  2. 特定のユーザがドメインに参加させたコンピュータを調べる方法

といった情報がなかなか見つからなかったので、ここにまとめておきます。

まず 1. について。
誰がコンピュータをドメインに参加させたのか(正確には、コンピュータアカウントがどのユーザによって作成されたのか)という情報は、コンピュータアカウントの mS-DS-CreatorSID 属性に SID で記録されています。
Administrator や Account Operators グループのメンバーなど、台数の制約がないユーザが参加させたコンピュータアカウントではこの属性の値が空になっているため、カウントを減らす方法はに以下の二つが考えられます。

  • 古いコンピュータアカウントを削除する
    dsquery コマンドなどで一定期間以上ログオンされていないコンピュータアカウントを抽出して削除すれば、自動的にカウントが減ります。
  • mS-DS-CreatorSID 属性の値を空にする
    ADSI Edit などのツールを使って、カウントを減らしたい対象のユーザがドメインに参加させたコンピュータアカウントの属性をクリアします。(Account Operators グループのメンバーがドメインに参加させたコンピュータアカウントと同じ状態にします)

通常は前者の方法でよいと思いますが、後者の方法をとりたい場合は、作業対象を把握するために 2. の方法についても考慮する必要があります。

次に 2. についてですが、残念ながら特定のユーザがドメインに参加させたコンピュータアカウントを簡単に検索することはできないようです。
標準ツールの 「Active Directory ユーザーとコンピューター」 では mS-DS-CreatorSID 属性は検索対象に選べないし、その他のツールを使う場合でも、ユーザID(SAM ID)からSIDを調べ、それからコンピュータアカウントを検索するという二度手間が必要で煩雑。
いい方法がないか調べてみたのですが、なかなか見つからなかったので WSH スクリプトを作成してみました。

やっていることは単純で、

  1. WMI を使って Active Directory 上のユーザアカウントを検索し、SID を取得
  2. Active Directory に LDAP 接続し、コンピュータアカウントの mS-DS-CreatorSID 属性が上記の SID にマッチするものを検索

といった感じです。

スクリプトはまだちょこちょこ直していますので、最新版はGitHubから参照ください。
ファイルをそのままダウンロードして cscript で実行すれば OK。
引数のフォーマットは変えるかもしれませんが、現状では検索対象のユーザID(SAM ID)をスペースで区切って並べるようになっています。

なお、VBA でなく JScript でスクリプトを書いているのは趣味です。(^_^;

2012年10月20日土曜日

2012年11月のコミックス

  • 9日 - 7SEEDS(23)
  • 16日 - capeta(30)
  • 30日 - 深夜食堂(10)
    • 聖様
  • 30日 - おやすみプンプン(11)
  • 30日 - ぼおるぺん古事記(3) 海の巻