use warnings; use strict; use Win32::NetAdmin qw(GetUsers GetServers GetDomainController LoggedOnUsers UserGetAttributes UserSetAttributes FILTER_NORMAL_ACCOUNT SV_TYPE_ALL ); use Fcntl; my $domain; my $pdc; ($domain = Win32::DomainName) or die "Unable to obtain the domain name"; Win32::NetAdmin::GetDomainController("", $domain, $pdc) or die "Unable to obtain the PDC name for $domain."; print "Get Domain Controller returned: $pdc\n"; my %machines; GetServers("", $domain, SV_TYPE_ALL, \%machines) or die "GetServers failed: $!\n"; print "\n\n===Machine to User Mapping\n"; my %users_machine; foreach my $machine (sort keys(%machines)) { my @users; unless(LoggedOnUsers($machine, \@users)) { warn "LoggedOnUsers for machine $machine failed: $!\n"; next; } my %unique_users; $unique_users{$_}++ for @users; foreach (sort keys(%unique_users)) { unless($_ eq $machine."\$") { print "$machine: $_\n"; push @{ $users_machine{$_} }, $machine; my $dbmkey = $machine . ":" . $_; } } } print "\n\n===User to Machine Mapping\n"; print "$_ => ", join(",", @{$users_machine{$_}}), "\n" for (sort keys(%users_machine));