2016-10-05 3 views
0

アクティブなディレクトリユーザからデフォルトでUserPrincipalオブジェクトにない属性の一部を取得する方法を見つけようとしていました。私の答えを探しているうちに、私はthis questionを見つけました。私は@marc_sによって投稿された答えが正しいと確信しています、少なくともそれは非常に便利です。有用性のため、私はUserPrincipalExクラスを作成し、彼の答えで提案された@marc_sのようなものをすべて行いました。このクラス自体は、拡張属性(この場合はtitle)が常に空の文字列を返すという事実を除いて、正しく定義されているようです。私は、その属性がtitleと呼ばれていることをADで二重にチェックしました。私は正しい属性を取得する必要があります。拡張されたUserPrincipalのみが空の文字列を返す

@marc_sにも、クラスがスケルトンであることが記載されていますが、そのために何を追加する必要があるのでしょうか?

自分の.csクラスの2つのクラスをUserPrincipalEx.csと定義し、そのファイルにUserPrincipalExSearchFilterUserPrincipalExのクラスが定義されています。しかし、私のコードでオブジェクトを作成すると、常に空の文字列が返されます。

UserPrincipalEx user = new UserPrincipalEx(principal.Context); 
if (user == null) return false; 
return user.Title == "A value other than empty" | (user.Title == "" || user.Title == null); 

さらに、titleの値をADから取得する必要がありますか?

アップデート:私はtitleの検索がUserPrincipalEx属性従えば

常にそれが私がUserPrincipalEx.cs常に

[DirectoryProperty("title")] 
public string Title 
{ 
    get 
    { 
     if (ExtensionGet("title").Length != 1) 
      return string.Empty; 

     return (string)ExtensionGet("title")[0]; 
    } 
    set { ExtensionSet("title", value); } 
} 

それをして何か間違ったことをしたように私が感じるように続けている、ヌルだと言いますreturn string.Empty;に当たって、行のように空文字列を返します

Updat e 2:

UserPrincipalExが探している拡張属性が常にnullを返し、文字列を空にすることは問題ではありません。

答えて

0

拡張子UserPrincipalを使用する代わりに、DictionaryEntryを使用して値を見つけて比較しました。

UserPrincipal user = new UserPrincipal(principal.Context); 
if (user == null) return false; 
DirectoryEntry directoryEntry = principal.GetUnderlyingObject() as DirectoryEntry; 
string title = ""; 
if (directoryEntry.Properties.Contains("title")) 
{ 
    title = directoryEntry.Properties["title"].Value.ToString(); 
} 
return title == "Comparison Value" | (title == "" || title == null); 
関連する問題