1

我正在创建一个程序,用于在特定计算机上的本地组中添加和删除域用户

我成功完成了将用户添加到组的部分,但是在删除时我收到了这个错误。

抛出异常:System.DirectoryServices.AccountManagement.dll 中的“System.DirectoryServices.AccountManagement.NoMatchingPrincipalException” System.DirectoryServices.AccountManagement.dll 中发生“System.DirectoryServices.AccountManagement.NoMatchingPrincipalException”类型的未处理异常附加信息:没有安全对象匹配找到的指定参数

这是我的函数和变量可以包含的示例

string username = "USER123"
string localGroupName = "Administrators"
string computername = "computer1"
using (PrincipalContext pc = new PrincipalContext(ContextType.Machine,computername))
{
    GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, localGroupName);

    group.Members.Remove(pc, IdentityType.Name, username);
    group.Save();
}

我也尝试更改 IdentityType,但得到了相同的结果

group.Members.Remove(pc, IdentityType.SamAccountName, username);

我可以使用 foreach 打印任何组的所有成员,因此我认为“GroupPrincipal”之前的所有内容都是正确的。

好像我输入了错误的用户名,但用户名是正确的(我正在使用它登录到域中的计算机)并且使用下面的公式也没有帮助。

域名\用户名

我也找到了这个线程,但对我来说,它看起来几乎是一样的,但写法不同。

非常感谢任何帮助或想法!抱歉,如果我遗漏了一些明显的东西,但我只使用了一段时间 C#。

4

1 回答 1

0

为我的问题找到了解决方案。也许它可以帮助某人,所以我把它贴在这里。

string computername = "computer1"
string groupName = "Administrators"
string usernameToRemove = "testUser"
using (PrincipalContext pc = new PrincipalContext(ContextType.Machine, computername))
  using (GroupPrincipal localGroup = GroupPrincipal.FindByIdentity(pc, IdentityType.Name, groupname))
    foreach (Principal groupUser in localGroup.GetMembers())
        if (groupUser.SamAccountName == usernameToRemove)
        {
            localGroup.Members.Remove(groupUser);
            localGroup.Save();
        }

我或多或少地编辑了这个问题的答案。他的解决方案不是像我一样搜索一个组的所有成员(如果我正确地理解了他的代码),但有效的解决方案是有效的解决方案。

于 2018-01-23T15:34:37.353 回答