我正在尝试以编程方式删除本地用户组。我正在使用以下代码,我已经从网上的各种示例拼凑而成。从我读过的所有内容来看,它都应该有效。但删除行会抛出异常。
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来说,我是一个完全新手。
答案 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();