忍者ブログ
HOME

2024.05.01
×

[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

2008.11.19
以下のテーブル[LIST]で、
Typeが2件以上重複する件数を集計するSQL。

LIST:
NameType
TANAKAA
SHIKIC
MARIAA
KURIYAKAWAB
TAROO
GEMB
GONZOAB
KARAKIB


SQLは、
SELECT Type, COUNT(*) AS NameCount
FROM LIST
GROUP BY Type
HAVING (COUNT(*) > 1)
ORDER BY Type


結果:
TypeNameCount
A2
B3


丸1日悩んだ集計SQLだったのでメモ代わりに。

HAVINGなんて滅多に使わないから
普通に忘れてました…。

実行環境:SQL Server 2005

--
昨日は勢い余って
5時の始発で出社して終電で帰るという
ブッ飛んだ麻薬中毒者(?)みたいなことをしてしまったので、
今日は午前半休の上に定時退社、
実働=4時間ということをしてみました。

2008.09.22
C# + ASP.NET のWebアプリで、
ドロップダウンリストを初期選択させる方法を以下に記載します。

あちこちググッたんですが、
そのものズバリを記載したサイトが見つからなかったので、
或いは単なる自分用メモ。

//リスト(dropdownHoge)にアイテムが追加されているものとする
//セッション変数はHOGE

誤コード①(by 後輩):
if (!dropdownHoge.Items.FindByValue(HOGE).Selected)
{
 dropdownHoge.Items.FindByValue(HOGE).Selected = true;
}
//セッション変数HOGE(と一致する値)が選択されていなかった場合、
//HOGEと同じものを選択させようとする意図は判ります。

誤コード②(by猫目):
//Dropdownアイテム分ループ
foreach (ListItem item in dropdownHoge.Items)
{ //セッション変数と一致した場合
 if (item.Value == HOGE)
 { //一致するアイテムを選択する
  item.Selected = true;
  break;
 }
}
//VBぽい方法。
//ドロップダウンアイテム数分回して、
//一致していれば選択させることを意図しました。

①②共に
System.Web.HttpException:
DropDownList で複数項目が選択されるように指定できません。

が出ます。

正解:
int index=0;
//Dropdownアイテム分ループ
foreach (ListItem item in dropdownHoge.Items)
{//セッション変数と一致した場合
 if (item.Value == HOGE)
 { //一致するアイテムを選択する
  dropdownHoge.SelectedIndex = index;
  break;
 }
 index++;
}

これだけ。
ドロップダウンのSelectedIndexを選択(初期表示)するItemのindexにするだけ。
わかってみると「なーんだ」な感じ。

C#, ASP.NET, DropdownList
--
外では雷がものすごく光ってます。
まさに風雲急を告げる感じ。

HOME
忍者ブログ [PR]
プロフィール
HomePage:

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

最新のトラックバック

フリーエリア