.Net 3.5 から AD の操作をするには System.DirectoryServices.AccountManagement を使う
のが推奨のようだが、UserPrincipal クラスで取得できる属性が限られている。
しかも sAMAccountName が SamAccountName というプロパティ名だったりして使いづらい。
いろいろ調べたら以下の URL に拡張の仕方が書いてあった。
プリンシパルの拡張
http://msdn.microsoft.com/ja-jp/library/bb384372%28v=vs.90%29.aspx
まず、以下のような UserPrincipal クラスのサブクラス(ここでは UserPrincipalExt)を作成。
getValueByAttributeName() つー独自のメソッドを実装し、FindByIdentity() を override してる。
[DirectoryObjectClass("user")]
class UserPrincipalExt : UserPrincipal
{
public UserPrincipalExt(PrincipalContext context)
:base(context){}
public object[] getValueByAttributeName(String attrName)
{
return ExtensionGet(attrName);
}
public static new UserPrincipalExt FindByIdentity(
PrincipalContext context,
IdentityType identityType,
string identityValue)
{
return (UserPrincipalExt)FindByIdentityWithType(
context,
typeof(UserPrincipalExt),
identityType,
identityValue);
}
}
んで、以下みたいに呼び出し。 以下はwWWHomePage を取得しているが
"sAMAccountName" 等の標準の属性も LDAP の名前のまま取得できる模様。
PrincipalContext ctxt = new PrincipalContext(
ContextType.Domain, "mydomain", "binduser", "bindpasswd");
UserPrincipalExt target = UserPrincipalExt.FindByIdentity(
ctxt, IdentityType.SamAccountName, "myusername");
object[] res = target.getValueByAttributeName("wWWHomePage");
0 件のコメント:
コメントを投稿