#  ADSIEnableAccount.pl
#  Example 9.7:
#  ----------------------------------------
#  From "Win32 Perl Scripting: Administrators Handbook" by Dave Roth
#  Published by New Riders Publishing.
#  ISBN # 1-57870-215-1
#
#  This script enables accounts.
#
print "From the book 'Win32 Perl Scripting: The Administrator's Handbook' by Dave Roth\n\n";


use Getopt::Long;
use Win32;
use Win32::OLE;

%Config = (
    disable =>  0,
);
Configure( \%Config );
print (( $Config{disable} )? "Disabling" : "Enabling" );
print " the following accounts:\n";

foreach my $Account ( @ARGV )
{
  my( undef, 
      $fMachine, 
      $Domain, 
      $UserName ) = ( $Account =~ /((\\\\)?(.*)\\)?(.*)?$/ );
  my $Class = ( "" eq $fMachine )? "domain" : "computer";
  $Domain = Win32::DomainName() if( "" eq $Domain );
  if( my $AD = Win32::OLE->GetObject( "WinNT://$Domain,$Class" ) )
  {
    my $User = $AD->GetObject( "User", $UserName ) || next;
    print "  $Account ";
    $User->{AccountDisabled} = $Config{disable};
    $User->SetInfo();
    $User->GetInfo();
    print (( $User->{AccountDisabled} == $Config{disable} )? 
          "(successful)" : "(failed)" );
    print "\n";
  }
}

sub Configure
{
  my( $Config ) = @_;
  my $Result;
  Getopt::Long::Configure( "prefix_pattern=(-|\/)" );
  $Result = GetOptions( $Config, "disable|d" );
  return();              
}