EVE-FA, ActiveDirectory, IDマネージャ, Cybozuのアカウント更新用スクリプト
各グループウェア等のアカウント更新用スクリプト。
batファイルより4つCSVを引数に渡して、EVE-FAのユーザー情報を元にパスワードを設定。
アカウント更新用のCSVをエクスポートします。
引数の順番は固定で、全てのCSVを渡すことが必須条件です。
[ evefa-ad-idm-cybozu.bat ]
-----
echo on
evefa-ad-idm-cybozu.pl eve-fa.csv ad.txt idm.csv cybozu.csv
[EOF]
-----
[ evefa-ad-idm-cybozu.pl ]
-----
#!/usr/local/bin/perl
sub createPass(){
$chars =
"012345678abcdefghijklmnorsuvwxyz";
$len = length( $chars );
$password = "";
for( $i = 0; $i < 8; $i++ ){
$password
.= substr( $chars, int( rand( $len )), 1 );
@password
= $password;
}
return ($password);
}
sub getTime(){
my $time = time();
my
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime($time);
my $result = sprintf("%04d%02d%02d",
$year + 1900, $mon + 1, $mday);
return $result;
}
sub evefa_ad(){
my $INFILE = $_[0];
open(IN, "$INFILE");
my $outfile = " $_[0]".getTime().".txt";
open(OUT, ">> $outfile");
while ($line = <IN>) {
chomp($line);
if($line
ne ''){
my @arrays = split( /,/, $line
);
@arrays[4] = createPass();
$ret = "";
$len = $#arrays + 1;
for($i=0; $i<$len;
$i++){
if($i == $len){
$ret = $ret.@arrays[$i];
}else{
$ret = $ret.@arrays[$i].',';
}
}
print(OUT "$ret\n");
}
}
close(IN);
close(OUT);
}
sub ad_conv(){
my $EVEFILE = " $_[0]".getTime().".txt";
my $INFILEA = $_[1];
my $outfile = " $_[1]".getTime().".txt";
open(OUT, ">> $outfile");
open(ADIN, "$INFILEA");
while ($ad_line = <ADIN>) {
chomp($ad_line);
if($ad_line ne ''){
@ad_array = split (/\s+/,
$ad_line);
}
if(@ad_array[2] eq "no"){
$userName = @ad_array[1];
if($userName ne ''){
$userName = (split( /@/, $userName))[0];
open(EVEIN, "$EVEFILE");
while($eve_line = <EVEIN>){
chomp($eve_line);
if($eve_line ne ''){
my @arrays = split( /,/,
$eve_line );
my
$eve_ac = @arrays[3];
my $pass = @arrays[4];
if($userName eq $eve_ac){
print
(OUT "$userName,$pass\n");
}
}
}
close(EVEIN);
}
}
}
close(ADIN);
close(OUT);
}
sub idm(){
my $EVEFILE = " $_[0]".getTime().".txt";
my $INFILE = $_[1];
my $outfile = " $_[1]".getTime().".txt";
open(OUT, ">> $outfile");
open(INFILE, "$INFILE");
while ($idm_line =
<INFILE>) {
chomp($idm_line);
if($idm_line ne ''){
@idm_array = split (/,/,
$idm_line);
}
if(@idm_array[3] == 1){
open(EVEIN, "$EVEFILE");
while($eve_line =
<EVEIN>){
chomp($eve_line);
if($eve_line ne ''){
my @arrays = split( /,/,
$eve_line );
my $eve_ac = @arrays[3];
my $pass = @arrays[4];
my $idm_ac = @idm_array[0];
my $idm_mail = @idm_array[6];
if($idm_mail =~
/^[^@]+@[^.]+\..+/){
@idm_array[7] = $pass;
}else{
@idm_array[7] = "";
}
if($idm_ac eq $eve_ac){
$ret = "";
$len = $#idm_array +
1;
for($i=0; $i<$len; $i++){
if($i == $len){
$ret = $ret.@idm_array[$i];
}else{
$ret = $ret.@idm_array[$i].',';
}
}
print(OUT "$ret\n");
$ret = "";
}
}
}
close(EVEIN);
}
}
close(INFILE);
close(OUT);
}
sub cybozu(){
my $IDMFILE = " $_[0]".getTime().".txt";
my $CYBOZUFILE = $_[1];
my $outfile = " $_[1]".getTime().".txt";
open(OUT, ">> $outfile");
open(IDMFILE, "$IDMFILE");
while($idm_line =
<IDMFILE>){
chomp($idm_line);
if($idm_line ne ''){
my @idm_arrays = split( /,/,
$idm_line );
my $idm_ac = @idm_arrays[6];
my $idm_pass = @idm_arrays[7];
open(CYBOZUFILE,
"$CYBOZUFILE");
while ($cyb_line =
<CYBOZUFILE>) {
chomp($cyb_line);
if($cyb_line ne ''){
@cyb_array = split (/,/,
$cyb_line);
}
$len = $#cyb_array + 1;
for($i=0; $i<$len; $i++){ @cyb_array[$i] =~ s/\"//g; }
my $cyb_login = @cyb_array[2];
if($idm_ac eq $cyb_login && $cyb_login =~
/^[^@]+@[^.]+\..+/){
@cyb_array[3] = $idm_pass;
$ret = "";
for($i=0; $i<$len;
$i++){
if($i == $len){
$ret =
$ret.@cyb_array[$i];
}else{
$ret =
$ret.@cyb_array[$i].',';
}
}
print(OUT "$ret\n");
}
}
close(CYBOZUFILE);
}
}
close(IDMFILE);
close(OUT);
}
&evefa_ad(@ARGV[0]);
&ad_conv(@ARGV[0], @ARGV[1]);
&idm(@ARGV[0], @ARGV[2]);
&cybozu(@ARGV[2], @ARGV[3]);
[EOF]
-----
上記Perlスクリプトにて生成されたADアカウント情報のCSVを読み込んで一括設定するBatファイル。
[ ad_updateRead.bat ]
-----
echo off
FOR /F "eol=# tokens=1,2 delims=," %%a in (hoge.txt) do ad_update.bat
%%a %%b
[EOF]
-----
net userコマンドにてADのアカウントを更新。
[ad_update.bat]
-----
echo off
net user "%1" "%2" /DOMAIN
[EOF]
-----