0

我正在尝试以编程方式删除本地用户组。我正在使用以下代码,这些代码是从网上的各种示例中拼凑而成的。从我读过的所有内容来看,它应该可以工作。但是 Delete 行会引发异常。

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 的东西时,我是一个完全的新手。

4

2 回答 2

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);
}
于 2017-02-04T01:08:27.593 回答
0

你能试试PrincipalSearchResult<GroupPrincipal>吗?

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

results.Where(item => item.Name == groupName).SingleOrDefault();
于 2012-05-21T17:58:59.393 回答