2010-05-25 3 views
1

Microsoft Active Directory에서 사용자의 LastPasswordSet 특성을 설정하고 싶습니다.Active Directory에서 사용자의 LastPasswordSet 날짜 설정

API는 LastPasswordSet 속성을 읽기 전용으로 제공합니다.

ADSI를 사용하여 값을 설정하는 방법이 있습니까?

편집 :

usr.Properties["pwdLastSet"].Value = -1; // To turn on, set this value to 0. 
usr.CommitChanges(); 

이 다음에 로그온 할 때 암호를 변경하도록 강제 :

MSDN 다음 예제 코드를 제공합니다. 나는 -1을 관련 형식의 날짜 - 시간으로 바꾸면 이것이 내가 원하는 것을 할 것입니다.

그러나 어떻게 주체를 잡는 지 표시하지는 않습니다 (아마도 usr). 나는 이것을 찾아내는 데 도움이되는 것을 upvote 할 것이다.

+0

http://blogs.technet.com/b/heyscriptingguy/archive/2005/07/06/how-can-i-cause-a-user-s-password-to-expire.aspx - 사용 가능일 수도 있습니다 – Ben

+0

http://msdn.microsoft.com/en-gb/library/ms180915.aspx - 사용할 수도 있습니다 – Ben

+1

좋아, 이제 귀하의 의도를 이해합니다. 두 번째 링크의 관련 부분을 대답으로 게시해야 upvote 할 수 있고 받아 들일 수 있습니다. 내가 아무 말도하지 않은 척해라. ;-) –

답변

1

또 다른 방법은 사용자의 로그인을 사용하여 DirectorySearcher 클래스를 통해 광고를 검색하는 것입니다. 당신의 PasswordLastSet 속성을 설정하고자 할 때

public DirectoryEntry GetUser(string domain, string loginName) { 
    DirectorySearcher ds = new DirectorySearcher(); 
    ds.SearchRoot = new DirectoryEntry(domain); 
    ds.SearchScope = SearchScope.Subtree; 
    ds.PropertiesToLoad.Add("sAMAccountName"); 
    ds.PropertiesToLoad.Add("pwdLastSet"); 
    ds.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(sAMAccountName={0})", loginName); 

    SearchResult sr = null; 

    try { 
     sr = ds.FindOne(); 
     if (sr == null) return null; 
     return sr.GetDirectoryEntry(); 
    } catch (Exception) { 
     throw; 
    } 
} 

그런 다음, 사용자가 존재 함을 보장하고 더 맞춤법 오류가 없는지 확인합니다.

string loginName = "AstonB1"; 

using(DirectoryEntry user = GetUser(loginName)) { 
    if (user == null) return; 

    user.Properties["pwdLastSet"].Value = whatever-format-the-date-should-be; 
    user.CommitChanges(); 
    user.Close(); 
} 
0

이와 비슷한?

var usr = new DirectoryEntry("LDAP://CN=Old User,CN=users,DC=fabrikam,DC=com"); 
usr.Properties["pwdLastSet"].Value = whatever-format-the-date-should-be; 
usr.CommitChanges(); 

아직 테스트되지 않았습니다.

관련 문제