Posted on 04-05-2018 08:10 AM
Hi everyone,
I'm looking into the feasibility of creating a smart group based on the login time of a user on the computer. In other words, something like show me all computers with a login date/time of within the last 12 hours.
I can't seem to find a way to do this and couldn't find any applicable discussion here.
Thanks!
Dan
Posted on 04-05-2018 08:49 AM
The only way I can see doing this is to create an Extension Attribute that would get the last login value time and drop that into a result formatted so Jamf Pro can use it as a Date formatted EA, and then build your Smart Group from there.
You could use the last
command to do this, but, last has an issue in that the date it stores is not really ideal since it doesn't include all required information. It shows a day, month, date and time, but no year for some inexplicable reason. Generally speaking this isn't a problem, but I can foresee scenarios where results can get a little weird, like just after the start of a new year, because you would have to assume the missing year from the last command is the current one and it may not always be.
A better approach might be to have a persistent login triggered policy (even cached locally so it runs offline) that just captures the date of last login (and maybe the username) on each login into a local file, then have the EA pick up that value later. For example, script for the login policy
#!/bin/bash
PLIST="/Library/Preferences/LastLoginValue.plist"
sleep 5
loggedInUser=$(stat -f%Su /dev/console)
loginTime=$(date +"%Y-%m-%d %H:%M:%S")
/usr/bin/defaults write "$PLIST" LastUser "$loggedInUser"
/usr/bin/defaults write "$PLIST" LastLoginTime "$loginTime"
Then for the EA script, something like this:
#!/bin/bash
PLIST="/Library/Preferences/LastLoginValue.plist"
LastLoginTime=$(/usr/bin/defaults read "$PLIST" LastLoginTime 2>/dev/null)
if [ ! -z "$LastLoginTime" ]; then
result="$LastLoginTime"
else
result="1970-01-01 00:00:00"
fi
echo "<result>$result</result>"
Using the above, you'll get results like
2018-04-01 10:05:34
The EA should be set up as a Date formatted EA, then you can build Smart Groups that use it with options like more than x days ago
or less than x days ago
Hope that helps.
Posted on 05-08-2018 08:37 AM
@mm2270 this is great! I have this all set up, but my EA isn't populating. This is my EA setup:
The PLIST it references is there and updating with the policy/script. I bet I missed something simple!
Thanks,
Dan
Posted on 05-08-2018 08:49 AM
Hi @dmcgeels4g. If everything above was set up and the plist is populating, the next thing to look at would be if there has been an inventory collection since it was set up. EAs only get run and thus populate values to a computer record at each inventory collection. So if one hasn't occurred since this was set up, that might be why you're not seeing anything just yet.
HTH.
Posted on 05-09-2018 07:05 AM
@mm2270 the inventory collection component was exactly what I was missing! Thanks for your help!