为什么我会收到 "No security object matching the specified parameters found" 错误 (GroupPrincipal)

Why am I getting "No security object matching the specified parameters found" error (GroupPrincipal)

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

我成功完成了将用户添加到组的部分,但在删除时出现此错误。

Exception thrown: 'System.DirectoryServices.AccountManagement.NoMatchingPrincipalException' in System.DirectoryServices.AccountManagement.dll An unhandled exception of type 'System.DirectoryServices.AccountManagement.NoMatchingPrincipalException' occurred in System.DirectoryServices.AccountManagement.dll Additional information: No security object matching the specified parameters found

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

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" 之前的所有内容都是正确的。

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

DomainName\UserName

我也找到了 this 个帖子,但对我来说它似乎几乎是同一件事,但写法不同。

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

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

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();
        }

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