Single Server
#!/usr/bin/perl
use strict;
use POSIX qw(ceil);
use User::pwent;
use Term::ANSIColor;
my ($user,%userids);
while ($user = getpwent()){
my $u = $user->name;
if ( `lsuser -a account_locked $u` =~ /.*account_locked=true.*/) {next;}
chomp(my $lastupdate = `lssec -f /etc/security/passwd -a lastupdate -s $u | awk -F= '{print \$2}'`);
if (! $lastupdate) { next; }
chomp(my $maxage = `lsuser -a maxage $u | awk -F= '{print \$2}'` * 7);
my $expires = $lastupdate + (60 * 60 * 24 * $maxage);
my $expire_date = scalar(localtime($expires));
my $change_date = scalar(localtime($lastupdate));
my $now = time();
my $daysremaining = ceil((($expires - $now) / (60*60*24)) - 1);
push(@{$userids{$u}}, $daysremaining,$maxage,$change_date,$expire_date);
}
print "User DaysLeft Expires LastChanged DaysValid\n";
foreach $user (sort {$userids{$a}[0] <=> $userids{$b}[0] } keys %userids){
if (@{$userids{$user}}[0] <= 0) {
print color("red");
}elsif(@{$userids{$user}}[0] <= 14){
print color("yellow");
}else{
print color ("green");
}
if (@{$userids{$user}}[1] eq 0) {
print color ("green");
printf "%-12s N/A %-25s %-25s %-9s\n", $user, "Never Expires",@{$userids{$user}}[2],"N/A";
}else {
printf "%-12s %-9d %-26s", $user, @{$userids{$user}}[0], @{$userids{$user}}[3];
printf "%-25s %-9d\n", @{$userids{$user}}[2], @{$userids{$user}}[1];
}
print color ("reset");
}