Create AD User, User must change password at next logon

   

/// <summary>

///

/// </summary>

/// <param name="ou">"OU=myOU,OU=CMMSG"</param>

/// <param name="cn">"cn" 用户帳號名稱 = 工號</param>

/// <param name="displayName">显示名称</param>

/// <param name="company">事業處</param>

/// <param name="department">部门</param>

/// <param name="section"></param>

/// <param name="office">辦公室</param>

/// <param name="telephoneNumber">电话号码</param>

/// <param name="notes">Notes 郵箱</param>

/// <param name="description">说明</param>

/// <param name="useComputers">登錄電腦 Cmmit001,Cmmit888</param>

/// <param name="manager">领导 "CN=UserName,OU=name,OU=cmmsg,DC=apj,DC=com"</param>

private static void createUser(

string ou, //OU

string cn,

string displayName,//显示名称

string company,//事業處

string department,//部门

string section, //

string office, //辦公室

string telephoneNumber,//电话号码

string notes, //Notes 郵件

string description, //说明

string useComputers, //登錄電腦

string manager //领导 "CN=UserName,OU=name,OU=cmmsg,DC=apj,DC=com"

)

{

try

{

DirectoryEntry userou = new DirectoryEntry("LDAP://" + ou + ",DC=apj,DC=com");

DirectoryEntry user = userou.Children.Add("cn=" + cn, "user");

user.Properties["sAMAccountName"].Add(cn);

user.Properties["displayName"].Add(displayName);

   

string userPrincipalName = cn + "@apj.com";

string givenName = default(string);

string sn = default(string);

if (displayName.Length > 1)

{

givenName = displayName.Substring(1);

sn = displayName.Substring(0, 1);

}

user.Properties["userPrincipalName"].Add(userPrincipalName);

user.Properties["givenName"].Add(givenName);

user.Properties["sn"].Add(sn);

user.Properties["telephoneNumber"].Add(telephoneNumber);

user.Properties["company"].Add(company);

user.Properties["department"].Add(department);

user.Properties["title"].Add(section);

user.Properties["physicalDeliveryofficeName"].Add(office);

user.Properties["description"].Add(description);

user.Properties["info"].Add(notes);

user.Properties["manager"].Add(manager);

user.Properties["userWorkStations"].Add(useComputers);

 

string password = "Foxconn123";

user.Properties["userPassword"].Add(password);

user.CommitChanges();

user.Invoke("SetPassword", new object[] { password });

user.CommitChanges();

 

user.Properties["userAccountControl"].Value = 512;//0x200; //0x200; //ADS_UF_NORMAL_ACCOUNT

user.Properties["pwdLastSet"].Clear();

user.Properties["pwdLastSet"].Add(0); //User must change password at next logon

 

user.CommitChanges();

   

}

catch (Exception ex)

{

Console.Write(ex.Message);

}

}

   

   

   

Property flag

Value in hexadecimal

Value in decimal

SCRIPT

0x0001

1

ACCOUNTDISABLE

0x0002

2

HOMEDIR_REQUIRED

0x0008

8

LOCKOUT

0x0010

16

PASSWD_NOTREQD

0x0020

32

PASSWD_CANT_CHANGE

0x0040

64

ENCRYPTED_TEXT_PWD_ALLOWED

0x0080

128

TEMP_DUPLICATE_ACCOUNT

0x0100

256

NORMAL_ACCOUNT

0x0200

512

INTERDOMAIN_TRUST_ACCOUNT

0x0800

2048

WORKSTATION_TRUST_ACCOUNT

0x1000

4096

SERVER_TRUST_ACCOUNT

0x2000

8192

DONT_EXPIRE_PASSWORD

0x10000

65536

MNS_LOGON_ACCOUNT

0x20000

131072

SMARTCARD_REQUIRED

0x40000

262144

TRUSTED_FOR_DELEGATION

0x80000

524288

NOT_DELEGATED

0x100000

1048576

USE_DES_KEY_ONLY

0x200000

2097152

DONT_REQ_PREAUTH

0x400000

4194304

PASSWORD_EXPIRED

0x800000

8388608

TRUSTED_TO_AUTH_FOR_DELEGATION

0x1000000

16777216

   

针对上面那个66050你这么来解析

66050=65536+512+2

分别表示密码永不过期,用户状态正常,用户被禁用

   

以上內容來自 <http://xunyangit.spaces.live.com/Blog/cns!F934535AFC3723BA!341.entry>

   

   

属性标志说明

1

SCRIPT -

将运行登录脚本。

2

ACCOUNTDISABLE -

禁用用户帐户。

8

HOMEDIR_REQUIRED -

需要主文件夹。

32

PASSWD_NOTREQD -

不需要密码。

64

PASSWD_CANT_CHANGE -

用户不能更改密码。可以读取此标志,但不能直接设置它。

128

ENCRYPTED_TEXT_PASSWORD_ALLOWED -

用户可以发送加密的密码。

256

TEMP_DUPLICATE_ACCOUNT -

此帐户属于其主帐户位于另一个域中的用户。此帐户为用户提供访问该域的权限,但不提供访问信任该域的任何域的权限。有时将这种帐户称为"本地用户帐户"。

  

NORMAL_ACCOUNT -

这是表示典型用户的默认帐户类型。

  

INTERDOMAIN_TRUST_ACCOUNT -

对于信任其他域的系统域,此属性允许信任该系统域的帐户。

  

WORKSTATION_TRUST_ACCOUNT -

这是运行 Microsoft Windows NT 4.0 WorkstationMicrosoft Windows NT 4.0 ServerMicrosoft Windows 2000 Professional Windows 2000 Server 并且属于该域的计算机的计算机帐户。

  

SERVER_TRUST_ACCOUNT -

这是属于该域的域控制器的计算机帐户。

  

DONT_EXPIRE_PASSWD -

表示在该帐户上永远不会过期的密码。

  

MNS_LOGON_ACCOUNT -

这是 MNS 登录帐户。

  

SMARTCARD_REQUIRED -

设置此标志后,将强制用户使用智能卡登录。

  

TRUSTED_FOR_DELEGATION -

设置此标志后,将信任运行服务的服务帐户(用户或计算机帐户)进行 Kerberos 委派。任何此类服务都可模拟请求该服务的客户端。若要允许服务进行 Kerberos 委派,必须在服务帐户的 userAccountControl 属性上设置此标志。

  

NOT_DELEGATED -

设置此标志后,即使将服务帐户设置为信任其进行 Kerberos 委派,也不会将用户的安全上下文委派给该服务。

  

USE_DES_KEY_ONLY - (Windows 2000/Windows Server 2003)

将此用户限制为仅使用数据加密标准 (DES) 加密类型的密钥。

  

DONT_REQUIRE_PREAUTH - (Windows 2000/Windows Server 2003)

此帐户在登录时不需要进行 Kerberos 预先验证。

  

PASSWORD_EXPIRED - (Windows 2000/Windows Server 2003)

用户的密码已过期。

  

TRUSTED_TO_AUTH_FOR_DELEGATION - (Windows 2000/Windows Server 2003)

允许该帐户进行委派。这是一个与安全相关的设置。应严格控制启用此选项的帐户。此设置允许该帐户运行的服务冒充客户端的身份,并作为该用户接受网络上其他远程服务器的身份验证。

 

UserAccountControl

这些值是某些对象的默认 UserAccountControl 值:

   

典型用户:0x200 (512)

域控制器:0x82000 (532480)

工作站/服务器:0x1000 (4096)