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



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

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

引发异常:"System.DirectoryServices.AccountManagement.NoMatchingPrincipalException"在System.DirectoryServices.AccountManagement中.dll System.DirectoryServices.AccountManagement.NoMatchingPrincipalException"类型为"System.DirectoryServices.AccountManagement.NoMatchingPrincipalException"的未处理异常.dll 其他信息:未找到与指定参数匹配的安全对象

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

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

我也尝试更改身份类型,但得到相同的结果

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

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

似乎我输入了错误的用户名,但用户名是正确的(我正在使用它登录到域中的计算机),并且使用波纹管公式也无济于事。

域名\用户名

我也发现了这个线程,但对我来说,它似乎几乎是同一件事,但写法不同。

任何帮助或想法将不胜感激!抱歉,如果我错过了一些明显的东西,但我只使用 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();
}

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

相关内容

  • 没有找到相关文章

最新更新