我正在尝试使用以下代码创建一个新的AD用户:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "Domain", "ou=some_ou, dc=Mydomain");
UserPrincipal user = new UserPrincipal(ctx, account, passwd, true);
user.GivenName = Givenname;
user.Surname = Surname;
user.DisplayName = Displayname;
user.UserPrincipalName = account + "@Domain";
user.Save();
创建用户时没有错误。但是我还必须设置像Address等属性,所以代码继续:
string distname = user.DistinguishedName;
DirectoryEntry duser = new DirectoryEntry(distname);
try
{
duser.Properties["company"].Value = "Company";
}
catch (Exception e)
{
}
现在我要
了错误:System.Exception._COMPlusExceptionCode -532459699
字符串distname
显示正确的专有名称。
答案 0 :(得分:2)
我并非100%确定导致您出现问题的原因,但有一件事可能会让您感觉更轻松,并且可能会因为您在同一时间使用DirectoryServices
和DirectoryServices.AccountManagement
而错误地清除错误时间是creating a new class that includes the company attribute。
实际上并不难做到。
[DirectoryObjectClass("user")]
[DirectoryRdnPrefix("CN")]
public class UserPrincipalEx : UserPrincipal
{
public UserPrincipalEx(PrincipalContext context) : base(context) { }
public UserPrincipalEx(PrincipalContext context, string samAccountName, string password, bool enabled)
: base(context, samAccountName, password, enabled)
{
}
[DirectoryProperty("company")]
public string Company
{
get
{
if (ExtensionGet("company").Length != 1)
return null;
return (string)ExtensionGet("company")[0];
}
set { this.ExtensionSet("company", value); }
}
}
然后您可以将代码修改为
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "Domain", "ou=some_ou, dc=Mydomain");
UserPrincipalEx user = new UserPrincipalEx(ctx, account, passwd, true);
user.GivenName = Givenname;
user.Surname = Surname;
user.DisplayName = Displayname;
user.UserPrincipalName = account + "@Domain";
user.Company = "Company";
user.Save();
我的预感是,您正在与两种与活动目录连接的方法进行某种交互,如果切换到单一界面,您的问题可能就会消失。
答案 1 :(得分:0)
对于DirectoryEntry,您必须指定协议(LDAP,GC,WinNT,...)。所以你必须这样做:
DirectoryEntry duser = new DirectoryEntry("LDAP://" + distname);
请注意,协议区分大小写,LDAP必须全部为大写。
答案 2 :(得分:0)
我发现您正在使用UserPrincipal中的凭据
创建DirectoryEntry时是否忘记使用它们? 此外,您需要在服务器名称
之前添加“LDAP://”尝试类似:
DirectoryEntry duser = new DirectoryEntry("LDAP://" + distname);
duser.Username = account;
duser.Password = passwd;
duser.AuthenticationType = AuthenticationTypes.Secure;