Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

addtogrp

by Marza (Vicar)
on Apr 12, 2002 at 21:27 UTC ( #158680=sourcecode: print w/ replies, xml ) Need Help??

Category: NT Admin
Author/Contact Info Marza
Description: addtogrp.pl

This script as the name implies is used to add ids or a list of IDs to a particular domain/AD group.

There is a logmsg subroutine which can be used for automation or history purposes. If it is not required, then comment it out.

I have not tested AD yet as we don't have an AD setup.

Finally, feel free to use it and mod it as you need. If you think something could be done better, please let me know.

use strict;
use warnings;
use Win32::NetAdmin;

my ($group, @names);
unless ( ($group, @names) = @ARGV ) {
    print "addtogrp <GROUP> <Input file> or <User> <User> ... \n\n";
    die ("   Use double quotes for Multiworded Groups: ie \"Domain Adm
+ins\"\n");
}

my $domain = Win32::DomainName or die "Unable to obtain the domain nam
+e";

my $DC;
Win32::NetAdmin::GetDomainController( '', $domain, $DC ) or 
            die "Unable to locate a Domain Controller\n";
#
# Do we have an input file?.
if (open(DAT, "$names[0]")) {
    @names = <DAT>;
    close DAT;
}
#
# Try and obtain the comment for the group.  If you can't it is either
+ an
# invalid entry or a security problem
my $comment;
unless (Win32::NetAdmin::GroupGetAttributes($DC, $group, $comment)) {
    &logmsg("Invalid group name $group. Error: $^E\n");
    die (" Invalid Group name $group. Error: $^E\n");
}

foreach my $user (@names) {
    chomp $user;
    print "Processing $user\n";
    #
    # Does the id exist?
    unless (Win32::NetAdmin::UsersExist($DC, $user)) {
        &logmsg("The account $user does not exist.\n");
        print " The account $user does not exist.\n";
        next;
    }
    #
    # Verify the id is not already in the group.  If not; add it.
    if (Win32::NetAdmin::GroupIsMember($DC, $group, $user)) {
        &logmsg("$user is already a member of $group\n");
        print " $user is already a member of $group\n";
        next;
    } else {
        unless (Win32::NetAdmin::GroupAddUsers($DC, $group, $user)) {
            &logmsg("Unable to add $user to $group due to error $^E ! 
+\n");
            print " Unable to add $user to $group due to error $^E ! \
+n";
            next;
        } else {
            &logmsg("Added $user to $group\n");
            print " Added $user to $group\n";
        }
    }
}
#
# Just a simple log routine.  Mainly for cases of automation in the fu
+ture.
sub logmsg {
    my $subject = shift;
    my $log = "addtogrp.log";
    my ($sec,$min,$hour,$mday,$mon,$year) = localtime(time());

    my $date = sprintf("%02d\/%02d\/%04d",$mon+1,$mday,$year+1900);
    my $time = sprintf("%02d:%02d:%02d",$hour,$min,$sec);

    unless (open(LOGFILE, ">>$log")) {
        die "Unable to open log file $log";
    }
    print LOGFILE ("$date  $time - $subject\n");
    close LOGFILE;
}

Comment on addtogrp
Download Code

Back to Code Catacombs

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: sourcecode [id://158680]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (5)
As of 2014-11-01 11:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (229 votes), past polls