2012-06-14 69 views
4

這裏是我的代碼:設置Windows/AD密碼以便「永不過期」?

using (DirectoryEntry AD = new DirectoryEntry("WinNT://" + Environment.MachineName + ",computer")) 
{ 
    DirectoryEntry NewUser = AD.Children.Add(username, "user"); 
    string password = username + "123"; 
    NewUser.Invoke("SetPassword", new object[] { password }); 
    NewUser.CommitChanges(); 
    NewUser.Close(); 
    DirectoryEntry grp; 
    grp = AD.Children.Find(groupname, "group"); 
    if (grp != null) 
    { 
     grp.Invoke("Add", new object[] { NewUser.Path.ToString() }); 
    } 
} 

,我希望做的是創建一個Windows用戶並設置密碼永不過期, 但我不知道如何做到這一點?

+0

看看這個問題如何查詢,它應該給你一些線索:http://stackoverflow.com/questions/7246945/active-directory-check-if-password-never-expires –

回答

3

* EDITED

對於域帳戶:

int NON_EXPIRE_FLAG = 0x10000; 
val = (int) NewUser.Properties["userAccountControl"].Value; 
NewUser.Properties["userAccountControl"].Value = val | NON_EXPIRE_FLAG; 
NewUser.CommitChanges(); 

本地帳戶:

我相信,如果你在你用 「UserFlags」,而不是userAccountControl的

+0

我試過,但它不起作用;購買方式,os系統是windows server 2003?有關係嗎? – Leslie

+0

對不起,當得到NewUser.Properties [「userAccountControl」] Value時,應用程序拋出System.NullReferenceException .... – Leslie

+0

我認爲對於本地帳戶,屬性是「userFlags」而不是「userAccountControl」(用於域帳戶) – bkr

5

.NET 3.5及更高版本,您應該檢查System.DirectoryServices.AccountManagement(S.DS.AM)命名空間。在這裏閱讀全部內容:

基本上,你可以定義一個機器上下文,容易在本地服務器上創建新用戶:

// set up machine-level context 
using (PrincipalContext ctx = new PrincipalContext(ContextType.Machine)) 
{ 
    // create new user 
    UserPrincipal newUser = new UserPrincipal(ctx); 

    // set some properties 
    newUser.SamAccountName = "Sam"; 
    newUser.DisplayName = "Sam Doe"; 

    // define new user to be enabled and password never expires 
    newUser.Enabled = true; 
    newUser.PasswordNeverExpires = true; 

    // save new user 
    newUser.Save(); 
} 

新S.DS.AM讓AD與用戶和羣體玩起來很容易!