|

|
1#
发表于 2009-9-10 11:54
| 只看该作者
[分享] 从AD查询用户并按ou生成outlook 2003地址簿
自己写的从AD查询用户并按ou生成outlook 2003地址簿#!/usr/bin/perl -w
my $ldapserver = '192.168.1.111';
my $ldapbase = "dc=cx,dc=com";
my $ldapuser = 'tt@cx.com';
my $ldappass = '12345678';
my $mail_attr = 'userprincipalname';
#my $mail_attr = 'mail';
my $filepath = './addrbook.csv';
my $surname_attr = 'sn';
my $givenname_attr = 'givenname';
my $name_attr = 'name';
use Net::LDAP;
use Encode;
use utf8;
$ldap = Net::LDAP->new( $ldapserver );
# 绑定到ldap服务器
$mesg = $ldap->bind( $ldapuser,password => $ldappass);
# 查询出域中的ou
$mesg = $ldap->search(
base => $ldapbase,
filter => "(&(ou=*)(!(ou=domain controllers)))"
);
$mesg->code && die $mesg->error;
# 循环获取ou中的信息
foreach $entry ($mesg->entries){
my $oudn = $entry->get_value('distinguishedname');
# 查询ou的名称
my $ouname = $entry->get_value('ou');
print "------",$oudn,"\n";
# 查询ou中的用户
my $mesg = $ldap->search( # perform a search
base => "$oudn",
filter => "(objectclass=person)"
);
$mesg->code && die $mesg->error;
# 循环获取ou中的条目
for($mesg->entries){
my $email = $_->get_value($mail_attr);
my $surname = $_->get_value($surname_attr);
my $givenname = $_->get_value($givenname_attr);
my $name = $_->get_value($name_attr);
$email = &utf8togb2312($email);
$surname = &utf8togb2312($surname);
$givenname = &utf8togb2312($givenname);
$name = &utf8togb2312($name);
print $name,"\n";
#print $email,"\n";
$email = lc($email);
&addbook($filepath) unless -e $filepath;
&addaddr($filepath,$surname,$givenname,$name,$email);
&addbook($filepath."_".$ouname.".csv") unless -e $filepath."_".$ouname.".csv";
&addaddr($filepath."_".$ouname.".csv",$surname,$givenname,$name,$email);
}
}
$mesg = $ldap->unbind; # take down session
# 在创建好的csv地址簿中添加地址
sub addaddr {
my($filepath) = shift;
my($surname,$givenname,$name,$email) = @_;
open(FH,">>",$filepath)or die "Can't open csv file:$!";
# 写入数据
# 0 英文称谓 1 名 3 姓 4 中文称谓 6 部门 51 电子邮件地址 52 电子邮件类型 53 电子邮件显示名称
&wrdata(\*FH,'1',$givenname,'3',$surname,'4',$name,'51',$email,'52','SMTP','53',$name);
close FH;
}
# 创建csv地址簿并写入标题
sub addbook {
my($filepath) = shift;
print "make csv \n";
# 1 2 3 4 5
my @title = qw(英文称谓 名 中间名 姓 中文称谓
单位 部门 职务 商务地址街道 商务地址街道2
商务地址街道3 商务地址市县 商务地址省市自治区 商务地址邮政编码 商务地址国家地区
住宅地址街道 住宅地址街道2 住宅地址街道3 住宅地址市县 住宅地址省市自治区
住宅地址邮政编码 住宅地址国家地区 其他地址街道 其他地址街道2 其他地址街道3
其他地址市县 其他地址省市自治区 其他地址邮政编码 其他地址国家地区 助理的电话
商务传真 商务电话 商务电话2 回电话 车载电话
单位主要电话 住宅传真 住宅电话 住宅电话2 ISDN
移动电话 其他传真 其他电话 寻呼机 主要电话
无绳电话 TTYTDD电话 电报 Internet忙闲 办公地点
地点 电子邮件地址 电子邮件类型 电子邮件显示名称 电子邮件3显示名
电子邮件3类型 电子邮件3地址 电子邮件2地址 电子邮件2类型 电子邮件2显示名
附注 工作证号码 关键字 记帐信息 纪念日
经理姓名 类别 里程 敏感度 目录服务器
配偶 其他地址邮箱 商务地址邮箱 身份证编号 生日
私有 缩写 网页 性别 业余爱好
引用者 用户1 用户2 用户3 用户4
优先级 语言 帐户 职业 住宅地址邮箱
助理的姓名 子女
);
open(FH,">",$filepath)or die "Can't open csv file:$!";
# 写入标题
my $i = 0;
for(@title){
binmode(FH, ':encoding(utf8)');
print FH "\"$_\"";
&printcomma($i,\*FH);
$i++;
}
close FH;
}
# 往csv中写入数据
sub wrdata {
my $handle = shift;
my %date = @_;
my $i = 0;
while($i le 91){
if (defined($date{$i})) {
print FH "\"$date{$i}\"";
&printcomma($i,$handle);
}else{
&printcomma($i,$handle);
}
$i++ ;
}
}
# 打印逗号和换行符
sub printcomma {
my ($i,$handle) = @_;
if ($i ne 91) {
print $handle ",";
}else{
print $handle "\n";
}
}
sub utf8togb2312 {
my $a = shift;
my $b = encode("gb2312",decode("utf8",$a));
return $b;
} [ 本帖最后由 xia_y_h 于 2009-9-10 11:56 编辑 ] |
|