如何在不引发异常的情况下找到AD条目?

时间:2013-10-10 22:20:57

标签: c# .net active-directory windows-server-2008 user-accounts

我有以下代码从AD中删除本地用户帐户:

try
{
    string username = "MyUserName";

    using (DirectoryEntry hostMachineDirectory = new DirectoryEntry("WinNT://localhost"))
    {
        DirectoryEntries entries = hostMachineDirectory.Children;

        DirectoryEntry deUser = null;
        try
        {
            deUser = entries.Find(username, "User");
        }
        catch (COMException ex)
        {
            //Look for "no such user" exception
            if ((uint)ex.ErrorCode != 0x800708ad)
            {
                throw ex;
            }
        }

        if (deUser != null)
            entries.Remove(deUser);
        else
            ShowMessageBoxError("No such user: " + username, MessageBoxIcon.Information);
    }
}
catch (Exception ex)
{
    ShowMessageBoxError(ex);
}

如果没有这样的用户,有没有办法避免引发和捕获该异常?

2 个答案:

答案 0 :(得分:1)

如果您使用的是.NET 3.5及更高版本,则应查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。在这里阅读所有相关内容:

基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:

// set up context to your local machine only
using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine))
{
    // find your user
    UserPrincipal user = UserPrincipal.FindByIdentity(ctx, username);

    if(user != null)
    {
       // if user is found - remove it
       user.Delete();
    }
}

新的S.DS.AM让您可以轻松地与AD中的用户和群组一起玩!

答案 1 :(得分:0)

您可以使用DirectorySearcher。 设置过滤器,调用FindOne方法,然后检查结果是否为空