2008/08/13 13:19

Active Directory의 Attribute Value를 VBScript를 통해 <Not Set>으로 설정하기

팔자에 없는 IM 프로젝트를 하다보니 굴욕.... 참 순간이었다. ㅋㅋ
참 못난 인간에게 무시당하는 기분이 어떤건지 처절하게 느꼈었다.
그래도 그 순간에도 공부할 건 있었다.. 바로 Active Directory의 LDAP 핸들링...ㅋㅋㅋ

-------------------------------------------------------------------------------------

앞에서 AD Attribute를 수정하는 스크립트를 만들어 봤다. 그런데 문제가 하나 생겼다. 문제가 뭔고 하니 수정할 값이 있을 때는 GetObject를 이용해 가져온 Object put 메소드를 이용해  다음과 같이 작업하면 됐다.

 

ObjectName.put Attribute Name , Value    Attribute에 값 입력

ObjectName.SetInfo  Commit

 

하지만 문제는 Attribute에 설정되어 있던 값을 지울 때다.

 

여러가지 테스트를 통해 Null, 0, “” 등의 값은 put 메소드를 통해 Attribute Value로 저장할 수 없었다.

아니 저장은 되는데... 그 자체가 값(value)으로 인식이 되는 거였다. 아주 환장할 노릇이었다.

 

Attribute의 값을 지우는 (DB에서의 Null과 유사) 것은 다음과 같이 AD에서 제공하는 확장툴인 ADSIEDIT.MSC를 이용해서 Attribute Value를지울 때는 Not Set 이라는 애매한 값으로 설정되는 것을 확인할 수 있다.

 

사용자 삽입 이미지
 

 

Attribute에 값이 없는 비어있는 경우 <Not Set>이라고 되어 있는 것을 볼 수 있다.

Attribute를 더블클릭해서 값을 지울 때도 아래 화면처럼 Clear라는 버튼을 통해서만 <Not Set> 상태로 설정할 수 있다.


사용자 삽입 이미지


Clear버튼을 이용하지 않고 Value 항목을 모두 지운 다음 OK 버튼을 눌러 저장하면 <Not Set으로 표시되지 않는다.

어떤 이유에서인지는 모르겠지만 AD에서 사용하는 Null (값이 없는 상태)은 일반 DB와는 다르게 “”이나 Null로는 표시되지 않는 것 같다.

 

Microsoft TechNet을 뒤쳐 검색한 결과 나와 같은 질문을 올린 사람이 있고 그에 대한 답을 발견할 수 있었다.

 

방법은 다음과 같이 PutEx 라는 메소드를 통해 값을 0으로 설정해야 했다. Put은 안된다고 되어 있다. put을 통해서는 안되는지는 모르겠다.

그리고 Put PutEx는 하나의 트랜잭션에서 함께 혼용해도 잘 동작했다.

 

먼저 파일 앞부분에 상수를 하나 선언한다.

 

Const ADS_PROPERTY_CLEAR = 1

 

그리고 값을 지울 객체의 Attribute 값을 다음과 같이 설정한다.

 

ObjectName.putEx  ADS_PROPERTY_CLEAR, "Attribute Name", 0

 

모두 설정을 했으면 commit 해준다.

 

ObjectName.SetInfo


스크립트 예제는 앞의 포스트를 보기 바란다.


------ Written By unicenter@naver.com -----

Trackback 0 Comment 0