[英]create AD-User in c#
我正在嘗試使用以下代碼創建一個新的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
顯示正確的可分辨名稱。
我不是百分之百確定是什么導致了您的問題,但有一件事情可能會讓您更容易,並且可能會因為您不正確地同時使用DirectoryServices
和DirectoryServices.AccountManagement
而清除一些錯誤.AccountManagement同時創建一個包含公司屬性 。
它實際上並不難做到。
[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();
我的預感是,您正在與兩種與活動目錄連接的方法進行某種交互,如果切換到單個界面,您的問題可能就會消失。
對於DirectoryEntry,您必須指定協議(LDAP,GC,WinNT,...)。 所以你必須這樣做:
DirectoryEntry duser = new DirectoryEntry("LDAP://" + distname);
請注意,協議區分大小寫,LDAP必須全部大寫。
我看到你在UserPrincipal中使用憑據,
在創建DirectoryEntry時是否忘記使用它們? 此外,您需要在服務器名稱之前添加“LDAP://”
嘗試類似的東西:
DirectoryEntry duser = new DirectoryEntry("LDAP://" + distname);
duser.Username = account;
duser.Password = passwd;
duser.AuthenticationType = AuthenticationTypes.Secure;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.