2012-04-20 16 views
8

のためのグループのリストを取得私は、ユーザーがであるグループのリストを取得したい特定のUserPrincipal

をこれが私のコードです:私は実行すると、

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain.ac.uk", "DC=mydomain,DC=AC,DC=UK", "user", "password"); 

UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUser"); 

PrincipalSearchResult<Principal> results = user.GetGroups(); 

foreach(Principal p in results) 
{ 
    Response.Write(p.Name); 
} 

私は次しまいました行のエラーResponse.Write(p.Name);

System.Runtime.InteropServices.COMException:指定されたディレクトリサービス属性または値が存在しません。

結果の数を確認すると、9が返され、最初のグループはDomainUsersになります。

リスト内の9つのグループをすべて反復できますか?ありがとう。

次は私が得るユーザのリストである:

enter image description here

+0

PrincipalContextをどのように初期化しますか? – Damith

+0

PrincipalContext ctx =新しいPrincipalContext(ContextType.Domain、 "mydomain.ac.uk"、 "DC = mydomain、DC = AC、DC = UK"、 "user"、 "password"); – TTCG

+0

name属性は、照会されたドメインとは異なるドメインに属していた可能性があるため、入力されていない可能性があります。 DisplayNameまたはDistinguishedNameまたはSamAccountNameまたはSIDを入力してみてください。 – Ben

答えて

1

は、私はそれがダム音を知っているが、それは、過去に私のために働いてい

foreach(Principal p in results) 
{ 
    if (p is GroupPrincipal) 
     Response.Write(p.DisplayName); 
} 

のようなものを試してみてください。あなたの結果は、実際には1つのセキュリティグループと8つの "その他の"タイプのグループしか見つからなかったようです。それらの「他の」グループは、それらの属性を所有していないかもしれません。

+0

私の場合、名前はより良かった(DisplayNameは空だった: 'User.GetGroups()。OfType ()。Select(p => p.Name));' –

5

PrincipalContextクラスに記載されているようにLDAPコンテナプロパティを省略する場合、コードを実行しているユーザがデフォルトUserコンテナ(即ちCN=Users,DC=yourDomain,DC=COM)とComputersコンテナ(即ちCN=Computers,DC=yourDomain,DC=COM)の両方にアクセス許可を読んでいる必要があります。

ユーザーが必要な権限を持っていない場合は、次のエラーメッセージが表示されます:

指定されたディレクトリサービス属性または値が

  • 「context.Containerを」は存在しません投げました'System.NullReferenceException'型の例外を含む文字列 {System.NullReferenceException}

  • ((新しいSystem.Linq.SystemCo re_EnumerableDebugView(群))。項目[5])。説明System.Runtime.InteropServices.COMException 'ストリング {System.Runtime.InteropServices.COMException}

」 タイプの例外 を投げ'私のブログ記事を確認してください Authentication Problems with PrincipalContext

+0

ドメイン内のコンピュータコンテナを誰かが削除した場合あなたはこのエラーも受け取ります。天国のために...誰かがその事を削除した。 –

+0

'this.RequestContext.Principal.IsInRole("広告グループ名 ")'を使用しようとしている誰でも、例外がスローされずに常にfalseを返します。これが原因です。 CNの復元とアクセス許可が私のために修正されました。 –

関連する問題