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 Workstation、Microsoft Windows NT 4.0 Server、Microsoft 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)