Windows

アカウント更新用スクリプト

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]
-----

このページの先頭へ