2010-02-03 4 views
0

스크립트에서 Active Directory 사용자를 만들 때 암호를 변경할 수없는 옵션도 설정해야합니다. 관리 GUI를 통해 "사용자가 암호를 변경할 수 없음"을 선택하여 쉽게 수행 할 수 있습니다. 프로그래밍 방식으로 그러나, 그것은 또 다른 이야기입니다. 나는 recipe이 ADSI COM API와 상호 작용하는 것을 발견했다. 그러나 기술적 인 이유로 .NET API (짧은 버전 : 내 스크립트에서 ADSI COM API에 액세스 할 수 없음)를 통해 동일한 작업을 수행하고 싶습니다. . 이 파이썬 코드에서 볼 수 있듯이Active Directory 사용자가 DirectoryServices를 사용하여 암호를 변경하지 못하도록 방지

나는, 순수한 .NET을 상기 레시피를 번역하려고 노력하지만, 불행하게도 아무런 효과가 없습니다 :

dir_entry = System.DirectoryServices.DirectoryEntry(ad_user) 
obj_sec = dir_entry.ObjectSecurity 
# Password GUID 
guid = System.Guid(System.String("ab721a53-1e2f-11d0-9819-00aa0040529b")) 
for identity in (r"NT AUTHORITY\SELF", "EVERYONE"): 
    identity = System.Security.Principal.NTAccount(identity) 
    access_rule = System.DirectoryServices.ActiveDirectoryAccessRule(
      identity, 
      System.DirectoryServices.ActiveDirectoryRights.ExtendedRight, 
      System.Security.AccessControl.AccessControlType.Deny, 
      guid 
      ) 
    obj_sec.AddAccessRule(access_rule) 
dir_entry.ObjectSecurity = obj_sec 
dir_entry.CommitChanges() 

크게 도움 :

답변

1
감사하겠습니다을

.NET 3.5를 사용할 수 있다면 거기에 System.DirectoryServices.AccountManagment이라는 새 네임 스페이스가 있습니다. 해당 네임 스페이스의 UserPrincipal 클래스를 사용하면 단순히 부울 UserCannotChangePassword 속성을 false로 설정하여 "암호를 변경할 수 없습니다"를 설정할 수 있습니다.

+0

감사합니다. 매우 흥미롭게 보입니다. 파이썬 for .NET 브리지를 통해 .NET 버전을 사용할 수 있는지 확인해야합니다. – aknuds1

+0

대단히 감사합니다.이 솔루션은 완벽하게 작동했습니다! – aknuds1