C\#를 사용 하여 WindowAD 를 조작 하 는 Windows 사용자

.net 은 ladp 에서 윈도 우즈 AD 를 조작 하 는 클래스 와 인 터 페 이 스 를 모두 System.Directory Services 네 임 스페이스 아래 에 놓 습 니 다.
 
public void CreateWindowsUser(String userName,String password,String userDesc,int userControl)
{
     String ladpRootPath = "LDAP://192.168.213.168/CN=Users,DC=pk1,DC=cctv,DC=com";
     DirectoryEntry ladpRoot = new DirectoryEntry(ladpRootPath);
     ladpRoot.Username = "XXXXX";
     ladpRoot.Password = "XXXXX";
     DirectoryEntry user = ladpRoot.Children.Add("CN="+ userName, "user");
     user.Properties["sAMAccountName"].Value = userName;
     user.Properties["description"].Value = userDesc;
     user.Properties["userAccountControl"].Value = userControl;
     user.CommitChanges();
     user.Invoke("SetPassword", password);
     user.CommitChanges();
     user.Close();
}
 
상술 한 방법 은 윈도 우즈 사용 자 를 추가 하 는 것 을 간단하게 실현 했다.주의해 야 할 것 은 프로그램 이 역 제어 위 에 놓 여 실행 된다 면,ladpRoot.Username 과 ladpRoot.Password 는 값 을 부여 할 수 없다 는 것 이다.또한 ladpRootPath 는 ladp 의 경로 쓰기 입 니 다.LDAP:/192.168.213.168 은 호스트 주 소 를 표시 합 니 다. DC=pk1,DC=cctv,DC=com 은 작 동 할 윈도 영역 을,CN=Users 는 윈도 우즈 영역의 홈 디 렉 터 리 에 있 는 Users 용기 대상 을 표시 합 니 다.방법 매개 변수 userControl 은 일부 사용자 속성 을 표시 합 니 다.예 를 들 어 암호 가 만 료 되 지 않 고 사용 자 를 사용 하지 않 는 등 구체 적 인 값 은 상세 합 니 다.http://support.microsoft.com/kb/305144/zh-cn사용자 가 여러 속성 을 포함 하고 있다 면 이 속성 값 을 위치 나(|)에 따라 연산 하면 됩 니 다.이 사용자 속성 중 하 나 는 예외 입 니 다.바로 PASSWD 입 니 다.CANT_CHANGE,이 속성 은 사용자 가 비밀 번 호 를 수정 할 수 없다 는 것 을 나타 낸다.그러나 그 는 읽 기 전용 속성 이다.즉,userAccountControl 설정 을 통 해 기능 을 실현 할 수 없다.이 기능 을 실현 하려 면 상기 코드 user.close()에 있어 야 한다.다음 코드 를 삽입 하기 전에:
 
 Guid changePasswordGuid = new Guid("{ab721a53-1e2f-11d0-9819-00aa0040529b}");
 IdentityReference selfSddl = new SecurityIdentifier(WellKnownSidType.SelfSid, null); 
 IdentityReference everyoneSddl = new SecurityIdentifier(WellKnownSidType.WorldSid, null); 
 ActiveDirectoryAccessRule selfAccRule = new ActiveDirectoryAccessRule(selfSddl, ActiveDirectoryRights.ExtendedRight, AccessControlType.Deny, changePasswordGuid);
 ActiveDirectoryAccessRule everyoneAccRule = new ActiveDirectoryAccessRule(everyoneSddl, ActiveDirectoryRights.ExtendedRight, AccessControlType.Deny, changePasswordGuid);
 user.ObjectSecurity.AddAccessRule(selfAccRule);
 user.ObjectSecurity.AddAccessRule(everyoneAccRule);
 user.CommitChanges();

 
다음은 자주 사용 하 는 사용자 조작 코드 를 보 여 줍 니 다.
 
사용자 수정:
 
public void ModifyWindowsUser(String userName,String password,String userDesc,int userControl)
{
     String ladpRootPath = "LDAP://192.168.213.168/CN=Users,DC=pk1,DC=cctv,DC=com";
     DirectoryEntry ladpRoot = new DirectoryEntry(ladpRootPath);
     ladpRoot.Username = "XXXXX";
     ladpRoot.Password = "XXXXX";
     DirectoryEntry user = ladpRoot.Children.Find("CN=" +userName, "user");
     user.Properties["description"].Value = userDesc;
     user.Properties["userAccountControl"].Value = userControl;
     user.CommitChanges();
     user.Invoke("SetPassword", password);
     user.CommitChanges();
     user.Close();
}
 
 
사용자 삭제
 
 
public void DeleteWindowsUser(String userName)
{
     String ladpRootPath = "LDAP://192.168.213.168/CN=Users,DC=pk1,DC=cctv,DC=com";
     DirectoryEntry ladpRoot = new DirectoryEntry(ladpRootPath);
     ladpRoot.Username = "XXXXX";
     ladpRoot.Password = "XXXXX";
     DirectoryEntry user = ladpRoot.Children.Find("CN=" +userName, "user");
     user.DeleteTree();
     user.Close();
}
 
 
 
 
 
 
 
 

좋은 웹페이지 즐겨찾기