我目前正在使用PrincipalContext和UserPrincipal来返回用户的主要groupid。
如何获取此ID并找到实际的群组名称?
此外,我的代码可以正常分配用户的主要组,但是一旦我将它们分配给组,我就无法将其从域用户中删除,这是我更改之前的默认主要组。在尝试删除域用户组之前,我已调用Save()
。
我的要求声明我必须将用户添加到AD然后分配其主要组,然后将其作为域用户的成员删除。
答案 0 :(得分:2)
终于搞定了
PrincipalContext principalContext = this.principalFactory.CreateActiveDirectoryManagementContext(locationType);
UserPrincipal userPrincipal = this.principalFactory.CreateUserPrincipal(principalContext, userName);
string primaryGroupId = userPrincipal.GetPrimaryGroupId();
PrincipalSearchResult<Principal> results =
userPrincipal.GetAuthorizationGroups();
foreach (Principal principal in from principal in results
let sid = principal.Sid.ToString()
let test = sid.Split('-').ToList()
let count = test.Count
where test[count - 1].Equals(primaryGroupId)
select principal)
{
return principal.Name;
}
return string.Empty;
答案 1 :(得分:1)
没有看到你的代码,很难确定,但听起来你几乎就在那里!几年前我有类似的任务,这blog article对我很有帮助。这篇Scripting Guy文章更详细地讨论了这些步骤。
我不知道你是否可以使用System.DirectoryServices.AccountManagement这样做。使用该命名空间,Microsoft使一些常见的AD任务更容易,但如果这是其中之一,我会感到惊讶。
关于删除“域用户”组分配,在更改主要组之前,这是不可能的。
这是未经测试的伪代码,但我认为这样的事情会起作用。
// get the group
DirectoryEntry groupToAdd = new DirectoryEntry("LDAP://" + groupDistinguishedName);
// add the member
groupToAdd.Properties["member"].Add(userDistinguishedName);
// commit and close
groupToAdd.CommitChanges();
groupToAdd.Close();
您说您已经知道如何分配主要组,因此一旦完成并提交了主要组,您就可以删除“域用户”成员资格。
//Get the domain users
DirectoryEntry domainUsers = new DirectoryEntry("LDAP://" + domainUserDistinguishedName);
// Remove the user from the domain user group
domainUsers.Properties["member"].Remove(userDistinguishedName);
//Commit the changes
domainUsers.CommitChanges();
domainUsers.Close();
作为参考,这是C#overview中的一个不错的AD。希望这有帮助!
答案 2 :(得分:0)
此外,如果PowerShell是一个选项,this看起来几乎完全符合您的要求。