如何在不引发异常的情况下查找 AD 条目
本文关键字:情况下 查找 AD 条目 异常 | 更新日期: 2023-09-27 18:35:04
我有以下代码可以从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);
}
如果没有这样的用户,有什么方法可以避免引发和捕获该异常?
如果你使用的是 .NET 3.5 及更高版本,则应查看 System.DirectoryServices.AccountManagement
(S.DS.AM) 命名空间。在这里阅读所有关于它的信息:
- 在 .NET Framework 3.5 中管理目录安全主体
- MSDN 文档 on System.DirectoryServices.AccountManagement
基本上,您可以定义域上下文并在 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中玩用户和组变得非常容易!
你可以
改用DirectorySearcher。设置筛选器,调用 FindOne 方法,然后检查结果是否为 null