无法使用System.DirectoryServices.AccountManagement.UserPrincipal.Delete()删除本地用户

时间:2012-01-10 19:34:29

标签: c# .net visual-studio-2010 active-directory windows-server-2008-r2

我正在尝试使用System.DirectoryServices.AccountManagement.UserPrincipal

删除本地用户帐户

我正在使用在Windows Server 2008 R2 Enterprise SP1上运行的VS 2010

这是我的代码

using (var ctx = new PrincipalContext(ContextType.Machine))
{
    using (var up = UserPrincipal.FindByIdentity(ctx, "test1"))
    {                        
        if (up != null)
        {
            up.Delete();
        }
    }                       
}

调用up.Delete()时,收到异常,并显示以下消息:

  

位于路径的Active Directory对象   WinNT:// DOMAIN / MACHINENAME不是容器。

如何让Delete()工作?

2 个答案:

答案 0 :(得分:0)

您可以尝试在FindByIdentity重载中指定identityType参数:

using (var up = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "test1"))

答案 1 :(得分:0)

以下是一段对我有用的代码:

try
{
  PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "WM2008R2ENT:389", "dc=dom,dc=fr", "jpb", "pwd");

  /* Retreive a user
   */
  UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, "user3");
  if (user != null)
    user.Delete();
}
catch (Exception e)
{
  Console.WriteLine(e.Message);
}
Console.WriteLine("Done!");

被修改

因此对于本地计算机(SAM),它是以下内容,与您的代码完全相同,但如果代码未在提升的右侧管理员提示符下运行,则异常管理会显示 acces denied 错误。我认为你的错误来自于此。

try
{
  PrincipalContext computerContext = new PrincipalContext(ContextType.Machine);

  /* Retreive a user
   */
  UserPrincipal user = UserPrincipal.FindByIdentity(computerContext, "utilisateur1");
  if (user != null)
    user.Delete();
}
catch (Exception e)
{
  Console.WriteLine(e.Message);
}
Console.WriteLine("Done!");

到Console.ReadLine();