윈도우/윈도우 '잘'쓰기

펄 스크립트

ForceCore 2006. 8. 28. 22:18

http://www.extropia.com/tutorials/winperl/

 

윈도우에도 스크립트가 필요한데

배치파일을 쓰긴 너무 귀찮고, 뒤떨어진감이 있다. 함수가 뭐가 있는지도 잘 모르겠다.

 

vbscript도 좋기는 한데(MS에서 윈도우 스크립트 언어로 쓰려고 기능 확장을 많이 했다) 디버그 하기 힘들다. 어디서 에러가 나는지는 알려주는데 왜 나는지 정확히 알려주진 않기 때문이다. VB라는 언어가 그다지 아름답다고 느껴지지도 않고 ㅡ,.ㅡ;;

 

다음은 펄스크립트가 들어있는 디렉토리 내의 모든 ldif파일을 읽어들여서

AD에사용자 추가하는 스크립트다.

 

#/perl/bin/perl

 

# 흐름 설명
# 파일 목록을 가져온다.
# 각 파일에 대해..
#  ldifde -i 파일명을 하여 AD에 사용자 추가
#  각 파일읠 첫 줄을 읽어서 "dn: "부분을 없애 $dn에 저장.
#  dsmod user $x -pwd 초기비번 명령을 내려 비번 리셋도 해줄 것.

 

# 전제
# ldif파일은 모두 괜찮은 상태인 파일만 주어진다.
# ldif파일은 펄스크립트와 함께 들어있다.
# 스크립트가 들은 디렉토리에 done디렉토리가 만들어져 있다. (완료된 스크립트가 들어갈 곳)
# 스크립트와 unix2dos.exe가 함께 들어있어서 unix파일을 dos로 변환할 수 있다.

 

 

#---------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------
# 코드
#---------------------------------------------------------------------------------------
#---------------------------------------------------------------------------------------

 

# 디렉토리뒤지기 (while구문임. while구문 안쪽의 코드가 각 파일에 대해 행해지는 일.)
# <>는 한 줄 씩 읽는 operator임.
while (defined($next = <*.ldif>)) {

 

  print "adding $next...\n";

 

  # dosname을 next와 같게 설정한 다음 /을 \로 교체한다.
  # 커맨드라인툴에서는 \가 디렉토리 구분자니까.
  # $dosname = $next;
  # $dosname =~ s/\//\\/g;

  # 커맨드라인 명령 사용

  system "unix2dos $next"; #unix파일이라 \n캐릭터가 깨진 것 보정
  system "ldifde -i -f $next"; #AD에 entry 추가

 

  # 이제 비번 리셋을 해보자.
  open( FP, $next );  #파일 열고
  $dn = <FP>;   #한 줄 읽고
  close( FP );   #파일 닫고
  my $dn =  substr( $dn, 4); #앞 4캐릭터 삭제
  print "\n비번 리셋:\n";
  system "dsmod user $dn -pwdinitialpasswd";

 

  # 완료된 파일은 이동시킨다.
  if (-e "done/$next") {
    system "delete done\$next";
  }
  system "move $next done";

}