忍者ブログ

2024.05.22
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


2009.03.04
ActiveDirectory(AD)上のユーザが
有効であるか無効であるかを判定し、
有効なら無効に、無効なら有効にする
(処理自体には余り意味のない)処理です。

環境:
W2k3 Server R2 SP2(AD)
WinXP & Visual Studio 2005(C#.NET)

ユーザが有効か無効かは、
オブジェクトの userAccountControl 属性を調べますが、
この属性はビットマップ属性であるため、
16 進数のビット演算が必要になります。

ちなみに、UserAccountControl属性値については、
UserAccountControl フラグを使用して
ユーザー アカウント プロパティを操作する方法
(サポート オンライン)
をご参照ください。

で、無効ならばUserAccountControlには
ACCOUNTDISABLE(0x0002=2)が立っています。

以下、コード。
--
//ユーザオブジェクト取得
DirectoryEntry usr =
  new DirectoryEntry("LDAP://CN=Hoge,CN=users,DC=fabrikam,DC=com");


//userAccountControl値を取得
int val = (int) usr.Properties["userAccountControl"].Value;


//ADS_UF_ACCOUNTDISABLEが立っている(=無効である)場合
if ((val & (int)ActiveDs.ADS_USER_FLAG.ADS_UF_ACCOUNTDISABLE)
  == (int)ActiveDs.ADS_USER_FLAG.ADS_UF_ACCOUNTDISABLE)
{
  //ユーザー アカウントを有効にする(=フラグを解除)
  usr.Properties["userAccountControl"].Value
    = val & ~ (int)ActiveDs.ADS_USER_FLAG.ADS_UF_ACCOUNTDISABLE;
}
//ADS_UF_ACCOUNTDISABLEが立ってない(=有効である)場合
else
{
  //ユーザー アカウントを無効にする(=フラグを立てる)
  usr.Properties["userAccountControl"].Value
    = val | (int)ActiveDs.ADS_USER_FLAG.ADS_UF_ACCOUNTDISABLE;
}
//コミット
usr.CommitChanges();


--
ここでC#プログラマに余り馴染みがないのが、
論理演算子「 & | ~ 」ではないでしょうか?
基本自分をCプログラマだと思っている猫目も
ビット演算は結構不得手(^-^;)でして、
以下のページを参考にしました。
humming bird: ビット演算を理解してフラグを使いこなす [C#]
大変判りやすくまとまっています。感謝(^-^)。

アカウントの有効/無効化は以下を参考にしました。
ユーザー アカウントの有効化と無効化(MSDN)
管理者は見た!~AD と ILM 一家の秘密~
  : スクリプトセンターに挑戦!(ADSI でも論理演算って重要なんです!)


--
有効/無効化する方法については
あちこち書かれているんですが、

無効であるか?

という判定について、
C#でズバリ書かれたコードを
見つけることが出来なかったので、
復習も兼ねての自分用メモ。

C#, ActiveDirectory, ADSI
PR

●この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード

●この記事へのトラックバック
忍者ブログ [PR]
プロフィール
HomePage:

最新の記事
最新のコメント
(01/17)
(05/06)
(03/02)
(03/01)
(03/01)

最新のトラックバック

フリーエリア