September 2003
Intermediate to advanced
624 pages
15h 49m
English
This recipe requires the Windows Server 2003 domain functional level.
You want to determine which users have not logged on recently.
Open the Active Directory Users and Computers snap-in.
In the left pane, right-click on the domain and select Find.
Beside Find, select Common Queries.
Select the number of days beside Days since last logon.
Click the Find Now button.
> dsquery user -inactive <NumWeeks># This code finds the users that have not logged in over a period of time # ------ SCRIPT CONFIGURATION ------ # Domain and container/OU to check for inactive accounts my $domain = '<DomainDNSName>'; # e.g. amer.rallencorp.com my $cont = 'cn=Users'; # set to empty string to query entire domain # Or set to a relative path in the domain: # e.g. cn=Users # Number of weeks a user needs to be inactive to be returned my $weeks_ago = <NumWeeks>; # e.g. 4 # ------ END CONFIGURATION --------- use strict; use Win32::OLE; $Win32::OLE::Warn = 3; use Math::BigInt; # Need to convert the number of seconds since $weeks_ago # to a large integer for comparison against lastLogonTimestamp my $past_secs = time - 60*60*24*7*$weeks_ago; my $intObj = Math::BigInt->new($past_secs); $intObj = Math::BigInt->new($intObj->bmul('10 000 000')); my $past_largeint = Math::BigInt->new( $intObj->badd('116 444 736 000 000 000')); $past_largeint =~ s/^[+-]//; # Setup the ADO connections ...