Last password change in macOS
-
02-06-2021 - |
質問
Objective is to determine the last password change time for all the user accounts in macOS (Catalina).
sudo dscl . -read Users/swastibhushandeb accountPolicyData
Output:
<dict>
<key>creationTime</key>
<real>1570887333.512722</real>
<key>failedLoginCount</key>
<integer>0</integer>
<key>failedLoginTimestamp</key>
<integer>0</integer>
<key>passwordLastSetTime</key>
<real>1570887334.500102</real>
</dict>
</plist>
date -r
can be used to convert the epoch time stamps to human readable format as:
date -r 1570887334
How can the above be wrapped in a bash script/one liner code?Thanks in advance.
解決
date -r $(sudo dscl . -read /Users/username accountPolicyData |
tail -n +2 |
plutil -extract passwordLastSetTime xml1 -o - -- - |
sed -n "s/<real>\([0-9]*\).*/\1/p")
date -r <seconds>
takes some seconds.$(…)
runs a command and captures stdout.sudo dscl . -read /Users/… accountPolicyData
returns accountPolicyData as XML.tail -n +2
drops the first line of the output of the previous command, because dscl prints some extra information before the plist starts.plutil -extract passwordLastSetTime xml1 -o - -- -
-extract passwordLastSetTime xml1
extracts the value for the key passwordLastSetTime in the input, outputting as xml-o -
outputs to stdout-- -
reads from stdin--
to stop parsing options-
for stdin
sed -n "s/<real>\([0-9]*\).*/\1/p")
extracts just the integer from the output.-n
suppresses the default of printing every input lines/a/b/p
substitutes a for b, printing matching lines (overriding-n
for individual lines)<real>
matches the start of the line containing the integer we want\(…\)
is a capturing group[0-9]*
matches digits any number of times
.*
matches to the end of the line, thus removing content in the line we're not interested in\1
is the first capturing group
|
pipes stdout from the left command into stdin of the right command
You can put this command all on one line if you prefer.
所属していません apple.stackexchange