Windows 7 PC(AD 클라이언트)에 Active Directory를 실행하고 있습니다 Samba 4.6.3
.Debian Jessie
위성 안테나여기에서 관리자 계정을 사용하여 서버를 관리하지만 이제는 전체 사용자 목록을 읽을 수 있는 형식으로 내보내야 합니다..csv
사용위성 안테나(Windows의 클라이언트에서) 지금까지는 사용자 컨테이너이든 PC 컨테이너이든 한 OU
번에 하나(조직 단위) 내의 모든 개체만 내보낼 수 있습니다. 각 사용자 컨테이너에 대해 전체 사용자 목록을 내보내는 프로세스가 있지만 사용자 컨테이너 가 많습니다 .OU
OU
OU
OU
OU
질문: 이 반복 작업을 수행하지 않고도 전체 사용자 목록(이름과 성, 상대방 포함)을 빠르게 내보낼 수 있는 방법이 있습니까 ?
PD: 대답은 RSAT를 사용하는 Windows 클라이언트로 제한될 필요는 없으며 Samba 서버에도 있을 수 있습니다.
답변1
Bash 솔루션..부분적으로...
먼저 AD 콘텐츠를 추출합니다.
ldapsearch -s -h <ADHOST> -P <ADPORT> -D <USERDN WITH RIGHTS TO READ AD> -W -E pr-1000/noprompt -b <BASEDN FOR SEARCH> > ad_extract_tmp.ldif
"-W"는 사용자 비밀번호에 대한 대화형 프롬프트를 강제로 표시합니다. 명령 기록에 표시되는 것을 원하지 않습니다. 이것을 스크립트로 결합하면 "-w"를 사용하여 비밀번호 액세스를 보호할 수 있습니다.
이제 콘텐츠가 텍스트 파일로 추출되었으므로 텍스트 처리를 사용하여 이를 CSV 또는 원하는 다른 형식으로 변환할 수 있습니다.
ldif 파일은 래핑되어 있으므로 첫 번째 단계는 압축을 푸는 것입니다.
awk ' BEGIN (RS="\n\n"; FS="\n "} {for (i=1,i<=NF;i++) printf $i; printf "\n\n"}' ad_extract_tmp.ldif > ad_extract_tmp.ldif.unwrapped
여기서는 두 줄 끝이 있는 텍스트 블록으로 구성되도록 레코드를 재정의하고, 한 줄 끝과 한 공백만 있는 텍스트 블록으로 구성되도록 필드를 재정의합니다. 다음으로 각 줄을 필드로 처리하여 ldif로 래핑된 해당 항목("\n")을 단일 필드로 연결합니다. 이제 래핑되지 않은 ldif가 있으므로 마지막 단계는 ldif를 csv로 변환하는 것입니다.
awk ' Begin {
record = "false";
print "\x22uid\x22,\x22dn\x22";
}
{ if ( record = "true") {
if ( $0 ~ /~sAMAccountName./) {
uid = $0;
sub (/^.*: /,"",uid);
}
if ( $0 ~ /^\s*$/) {
print "\x22" uid "\x22,\x22" dn "\x22";
dn = ""; record = "false";
}
}
}
{
if ($0 ~ /^dn:./) {
record = "true";
dn = $0;
}
}' ad_extract_tmp.ldif.unwrapped > ad_extract.csv
이는 래핑되지 않은 ldif를 csv로 변환하는 상당히 단순화된 awk 변환 스크립트입니다.
사용자 ou에 대한 dn을 추출하고 필요한 다른 필드를 추적하는 것이 가능합니다. 최종 awk 스크립트를 확장하면 됩니다.