ユーザーを照会してSystem.DirectoryServices.AccountManagement
から、そのユーザーのグループを見つけるために使用しています。
var _principalContext = new PrincipalContext(ContextType.Domain, domainAddress, adContainer, adQueryAccount, adQueryAccountPassword);
var user = UserPrincipal.FindByIdentity(_principalContext, IdentityType.SamAccountName, account);
var userGroups = user.GetGroups();
foreach (var group in userGroups.Cast<GroupPrincipal>())
{
//////////////////////////////////////////////////////
// getting the underlying DirectoryEntry shown
// to demonstrate that I can retrieve the underlying
// properties without the exception being thrown
DirectoryEntry directoryEntry = group.GetUnderlyingObject() as DirectoryEntry;
var displayName = directoryEntry.Properties["displayName"];
if (displayName != null && displayName.Value != null)
Console.WriteLine(displayName.Value);
//////////////////////////////////////////////////////
Console.WriteLine(group.DisplayName);// exception thrown here...
}
基になるオブジェクトを取得してDirectoryEntry
そのプロパティと値をダンプできますが、GroupPrincipal.DisplayName
プロパティ (またはそのプロパティ) にアクセスするとすぐに、次の例外がスローされます。
「System.Runtime.InteropServices.COMException (0x8007200A): 指定されたディレクトリ サービスの属性または値が存在しません。\r\n\r\n で System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)\r\n で System. DirectoryServices.DirectoryEntry.Bind()\r\n で System.DirectoryServices.DirectoryEntry.get_SchemaEntry()\r\n で System.DirectoryServices.AccountManagement.ADStoreCtx.IsContainer(DirectoryEntry de)\r\n で System.DirectoryServices.AccountManagement. ADStoreCtx..ctor(DirectoryEntry ctxBase, Boolean ownCtxBase, String username, String password, ContextOptions options)\r\n System.DirectoryServices.AccountManagement.PrincipalContext.CreateContextFromDirectoryEntry(DirectoryEntry entry) で\r\n System.DirectoryServices.AccountManagement.PrincipalContext で.DoLDAPDirectoryInitNoContainer()\r\n で System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()\r\n で System.DirectoryServices.AccountManagement.PrincipalContext.Initialize() で\r\n System.DirectoryServices.Account Management.PrincipalContext.get_QueryCtx で()\r\n で System.DirectoryServices.AccountManagement.Principal.HandleGet[T](T& currentValue, String name, LoadState& state)\r\n で System.DirectoryServices.AccountManagement.Principal.get_DisplayName()\r\n でConsoleApplication9.Program.Main(文字列[]引数)"AccountManagement.Principal.HandleGet[T](T& currentValue, String name, LoadState& state)\r\n System.DirectoryServices.AccountManagement.Principal.get_DisplayName() で\r\n ConsoleApplication9.Program.Main(String[] args) で"AccountManagement.Principal.HandleGet[T](T& currentValue, String name, LoadState& state)\r\n System.DirectoryServices.AccountManagement.Principal.get_DisplayName() で\r\n ConsoleApplication9.Program.Main(String[] args) で"
基になるの未加工のプロパティをダンプできるのに、DirectoryEntry
で直接プロパティを呼び出すことができないのはGroupPrincipal
なぜですか? この例外の原因は何ですか? これは「Domain Users」グループでは発生せず、後続のグループでは発生することに注意してください...