#******************************************************************************
# Name:		GroupMembers.pl
# By:		Robert Spitzer
# Email:	spitzer_rl@naptheon.com
#
# This script enumerates the membership of a specified group.
#
# Usage:	GroupMembers.pl [domain] [group]
#
# Version:	1.0.0
# Created:	06/04/02	Revised:	00/00/00
#******************************************************************************
# Modules used by this script
use Win32::Lanman;

# If no arguements are provided, print out help information.
if($ARGV[0] eq "/?" || @ARGV < 2) { Usage(); }

# If  arguments are provided, run the script.
else {
	# Variables used by this script
	$Domain 		= $ARGV[0];
	$Group 			= $ARGV[1];
	$MemberCount 	= 0;
	
	# Get the local computer's hostname
	$LocalHost = `hostname`;
	chomp $LocalHost;
	
	# Get a domain controller for the given domain
	if (!Win32::Lanman::NetGetDCName("\\\\$LocalHost", $Domain, \$DCName)) {
		print "There was a problem getting the DC name for $Domain";
		exit;
	}
		
	if(!Win32::Lanman::NetGroupGetUsers($DCName, $Group, \@Members)) {
		if(!Win32::Lanman::NetLocalGroupGetMembers($DCName, $Group, \@members)) {
			print "There was a problem accessing the group $Group.
			       Please verify that the name provided is correct.";
			exit;
		}
	}
	
	# Print out the header
	$~ = HeaderInfo;
	write;
	
	$~ = DataInfo;
	
	# Print out the group membership and the total number of users
	foreach $Member (@Members) {
		$Count++;
		
		Win32::Lanman::NetUserGetInfo($DCName, ${$Member}{'name'}, \%info);
		
		$UserID		= $info{'name'};
		$FullName	= $info{'full_name'};
		
		write;
	}
		
	print "\nTotal Membership = $Count";
}

#****************************************************************************
sub Usage { 

print <<USAGE
	
GroupMembers.pl v1.0.0
Written by: Robert L. Spitzer

This script enumerates the membership of a specified group.

Usage:	GroupMembers.pl [domain] [group]
	
USAGE

}

#****************************************************************************
format HeaderInfo = 
@<<<<<<<<<<<<<<<<<<<<   @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
"UserID", "FullName"
---------------------   -----------------------------------------------------
.

format DataInfo = 
@<<<<<<<<<<<<<<<<<<<<   @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$UserID, $FullName
.