#  ADSIDisplayEnabledAccounts.pl
#  Example 9.8:
#  ----------------------------------------
#  From "Win32 Perl Scripting: Administrators Handbook" by Dave Roth
#  Published by New Riders Publishing.
#  ISBN # 1-57870-215-1
#
#  This script displays the what accounts are enabled or disabled.
#
print "From the book 'Win32 Perl Scripting: The Administrator's Handbook' by Dave Roth\n\n";


use Getopt::Long;
use Win32;
use Win32::OLE qw( in );

Configure( \%Config );
print "The following accounts are ";
print (( $Config{disable} )? "disabled" : "enabled" );
print ":\n";

push( @ARGV, Win32::DomainName() ) if( ! scalar @ARGV );
foreach my $Domain ( @ARGV )
{
    my( $fMachine, 
        $Name ) = ( $Domain =~ /(\\\\)?(.*)$/ );
    my $Class = ( "" eq $fMachine )? "domain" : "computer";
    if( my $AD = Win32::OLE->GetObject( "WinNT://$Name,$Class" ) )
    {
        # We only want user accounts.
        $AD->{Filter} = [ "User" ];    
        foreach my $User ( in( $AD ) )
        {
            if( $User->{AccountDisabled} == $Config{disable} )
            {
                print "  $Domain\\$User->{Name}\n" 
            }
        }
    }
}

sub Configure
{
      my( $Config ) = @_;
      my $Result;
      Getopt::Long::Configure( "prefix_pattern=(-|\/)" );
      $Result = GetOptions( $Config, "disable|d" );
    return();              
}
