6.28. Finding Users Who Have Not Logged On Recently

Tip

This recipe requires the Windows Server 2003 domain functional level.

Problem

You want to determine which users have not logged on recently.

Solution

Using a graphical user interface

  1. Open the Active Directory Users and Computers snap-in.

  2. In the left pane, right-click on the domain and select Find.

  3. Beside Find, select Common Queries.

  4. Select the number of days beside Days since last logon.

  5. Click the Find Now button.

Using a command-line interface

> dsquery user -inactive <NumWeeks>

Using Perl

# 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 ...

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.