尝试使用C#中的目录服务帐户管理删除本地用户组时出现异常

时间:2012-05-21 17:21:43

标签: c# .net windows directoryservices account-management

我正在尝试以编程方式删除本地用户组。我正在使用以下代码,我已经从网上的各种示例拼凑而成。从我读过的所有内容来看,它都应该有效。但删除行会抛出异常。

PrincipalContext context = new PrincipalContext( ContextType.Machine );
GroupPrincipal group = new GroupPrincipal( context );
PrincipalSearcher ps = new PrincipalSearcher( group );
PrincipalSearchResult<Principal> results = ps.FindAll();
Principal foundGroup = results.SingleOrDefault( item => item.Name == groupName );
if(foundGroup != null)
    foundGroup.Delete(); // Here occurs the InvalidOperationException

这会抛出InvalidOperationException并显示以下消息:

  

位于路径WinNT:// LOREM / IPSUM的Active Directory对象不是容器。“

对于这个Active Directory来说,我是一个完全新手。

2 个答案:

答案 0 :(得分:1)

刚才有人问过,但我今天遇到了这个问题。似乎Group和UserPrincipal库中存在错误。这就是我为将来遇到这种情况的人所做的工作:

对于团体:

string groupName = "myGroup";

// Workaround: WinNT://DOMAIN/USER is not a container even if group is empty
using (var root = new DirectoryEntry($"WinNT://{Environment.MachineName}"))
using (var group = root.Children.Find(groupName, "group"))
{
    root.Children.Remove(group);
    result = true;
}

对于用户帐户:

string userAccountName = "myUser";

// Workaround: WinNT://DOMAIN/USER is not a container issue
using (var root = new DirectoryEntry($"WinNT://{Environment.MachineName}"))
using (var userAccount = root.Children.Find(userAccountName))
{
    root.Children.Remove(userAccount);
}

答案 1 :(得分:0)

你能试试PrincipalSearchResult<GroupPrincipal>吗?

我也不确定你的.SingleOrDefault是否正确使用。你能尝试一下:

results.Where(item => item.Name == groupName).SingleOrDefault();