팔자에 없던 IM 프로젝트를 하다 보니 메인프레임 연동, Active Directory, SSO 그리고 그룹웨어부터 여러 업무용 시스템에 대한 계정 정보 관리에 대한 DB 분석까지 해야할 일이 정말 많았다. 그러다 보니 아는게 부족하기 때문에 발생하는 굴욕적인 순간들……. 참 견디기 힘든 좌절감에 휩싸이는 것은 정말 순간이었다. ㅋㅋ
게다가 참 못난 인간에게 무시 당하는 기분도 오랫만에 느꼈다.
그래도 그 순간에도 공부할 건 있었다.. 바로 VBScript를 이용한 Active Directory의 Attribute 핸들링…ㅋㅋㅋ
————————————————————————————-
앞에서 AD의 Attribute를 수정하는 스크립트를 만들어 봤다.
관련 포스트 보러 가기 : VB Script를 이용하여 Active Directory 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에 값이 없는 비어있는 경우 이라고 되어 있는 것을 볼 수 있다.
Attribute를 더블클릭해서 값을 지울 때도 아래 화면처럼 “Clear”라는 버튼을 통해서만 상태로 설정할 수 있다.
Clear버튼을 이용하지 않고 Value 항목을 모두 지운 다음 OK 버튼을 눌러 저장하면 으로 표시되지 않는다.
어떤 이유에서인지는 모르겠지만 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
스크립트 예제는 앞의 포스트를 보기 바란다.