簡體   English   中英

在c#中創建AD-User

[英]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顯示正確的可分辨名稱。

我不是百分之百確定是什么導致了您的問題,但有一件事情可能會讓您更容易,並且可能會因為您不正確地同時使用DirectoryServicesDirectoryServices.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM