[C#]無効ユーザの判定・ビット演算[ActiveDirectory]
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
| 固定リンク
この記事へのコメントは終了しました。
コメント
& | ~ =>c++
01&11 =>01
01|11 =>11
~01 =>10
~11 =>00
~00 =>11
投稿: Guset | 2018.08.08 10:46