Как добавить учетную запись пользователя в группу (член) - PullRequest
0 голосов
/ 16 января 2019

Я хочу добавить пользователя учетной записи Windows в группу Я использую этот метод:

public bool AddUserToGroup(PrincipalContext ctx, string userId, string groupName)
{
     try
    {
          GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, groupName);
          group.Members.Add(ctx, IdentityType.UserPrincipalName, userId);
          group.Save();
          return true;
    }
    catch
    {
         return false;
    }
}

когда я использую этот метод со следующим

PrincipalContext 
new PrincipalContext(ContextType.Domain, "Lab.net");

Работает нормально.

но когда я использую

PrincipalContext with username and password it have exception
new PrincipalContext(ContextType.Domain, "Lab.net","administrator","P@ssw0rd");

Исключение составляет:

System.DirectoryServices.AccountManagement.PrincipalOperationException: Не удалось получить информацию о домене (1355). в System.DirectoryServices.AccountManagement.Utils.GetDcName (строковое имя компьютера, строковое имя домена, строковое имя сайта, флаги Int32) в System.DirectoryServices.AccountManagement.ADStoreCtx.LoadDomainInfo () в System.DirectoryServices.AccountManagement.ADStoreCtx.get_DnsForestName () в System.DirectoryServices.AccountManagement.ADUtils.ArePrincipalsInSameForest (Принципал p1, Принципал p2) в System.DirectoryServices.AccountManagement.ADStoreCtx.UpdateGroupMembership (основная группа, DirectoryEntry de, учетные данные NetCred, AuthenticationTypes authTypes) в System.DirectoryServices.AccountManagement.SDSUtils.ApplyChangesToDirectory (Принципал p, StoreCtx storeCtx, GroupMembershipUpdater updateGroupMembership, учетные данные NetCred, AuthenticationTypes authTypes) в System.DirectoryServices.AccountManagement.ADStoreCtx.Update (принципал p) в System.DirectoryServices.AccountManagement.Principal.Save ()

Я могу создать пользователя с этим PrincipalContext, но не могу присоединить пользователя к группе.

1 Ответ

0 голосов
/ 31 января 2019

Я делаю это:

public bool AddUserToGroup(PrincipalContext ctx, DirectoryEntry userId, string groupName)
{
    try
    {
        //GroupPrincipal group = GroupPrincipal.FindByIdentity(ctx, groupName);
        //group.Members.Add(ctx, IdentityType.UserPrincipalName, userId);
        //group.Save();
        GroupPrincipal groupPrincipal = GroupPrincipal.FindByIdentity(ctx, groupName);
        if (groupPrincipal != null) {
            DirectoryEntry entry = (DirectoryEntry)groupPrincipal.GetUnderlyingObject();
            entry.Invoke("Add", new object[] { userId.Path.ToString() });
            userId.CommitChanges();
        }
        else {
            return true;
        }

        return true;
    }
    catch
    {
        return false;
    }
}
...