6.26. Finding Users Whose AccountsAre About to Expire

Problem

You want to find users whose accounts are about to expire.

Solution

Using Perl

# This code finds the user accounts that are about to expire.
# ------ SCRIPT CONFIGURATION ------
# Domain and container/OU to check for accounts that are about to expire
my $domain   = '<DomainDNSName>'; ' e.g. amer.rallencorp.com my $cont = ''; # set to empty string to query entire domain # Or set to a relative path in the domain, e.g. cn=Users # Number of weeks until a user will expire my $weeks_ago = 4; # ------ END CONFIGURATION --------- use strict; use Win32::OLE; $Win32::OLE::Warn = 3; use Math::BigInt; # Need to convert the number of seconds until $weeks_ago # to a large integer for comparison against accountExpires my $future_secs = time + 60*60*24*7*$weeks_ago; my $intObj = Math::BigInt->new($future_secs); $intObj = Math::BigInt->new($intObj->bmul('10 000 000')); my $future_largeint = Math::BigInt->new($intObj->badd('116 444 736 000 000 000')); $future_largeint =~ s/^[+-]//; # Now need to convert the current time into a large integer $intObj = Math::BigInt->new( time ); $intObj = Math::BigInt->new($intObj->bmul('10 000 000')); my $current_largeint = Math::BigInt->new($intObj->badd('116 444 736 000 000 000')); $current_largeint =~ s/^[+-]//; # Set up the ADO connections. my $connObj = Win32::OLE->new('ADODB.Connection'); $connObj->{Provider} = "ADsDSOObject"; # Set these next two if you need to authenticate # $connObj->Properties->{'User ...

Get Active Directory Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.