我正在尝试使用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()
工作?
答案 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();