Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic


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

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

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

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";
    # 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";
    } else {
        unless (Win32::NetAdmin::GroupAddUsers($DC, $group, $user)) {
            &logmsg("Unable to add $user to $group due to error $^E ! 
            print " Unable to add $user to $group due to error $^E ! \
        } 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
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;
Log In?

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (8)
As of 2020-09-21 19:33 GMT
Find Nodes?
    Voting Booth?
    If at first I donít succeed, I Ö

    Results (127 votes). Check out past polls.