3 votes

Dernier changement de mot de passe dans MacOS

L'objectif est de déterminer l'heure du dernier changement de mot de passe pour tous les comptes utilisateurs dans MacOS (Catalina).

  1. sudo dscl . -read Users/swastibhushandeb accountPolicyData

Sortie :

<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>
  1. date -r peut être utilisé pour convertir les horodatages d'époque en format lisible par l'homme comme :

date -r 1570887334

Comment faire pour que ce qui précède soit intégré dans un script/code unique bash ? Merci d'avance.

4voto

grg Points 181593
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> prend quelques secondes.
  • $(…) exécute une commande et capture le stdout.
    • sudo dscl . -read /Users/… accountPolicyData renvoie accountPolicyData au format XML.
    • tail -n +2 laisse tomber la première ligne de la sortie de la commande précédente, parce que dscl imprime quelques informations supplémentaires avant le démarrage de la plist.
    • plutil -extract passwordLastSetTime xml1 -o - -- -
      • -extract passwordLastSetTime xml1 extrait la valeur de la clé passwordLastSetTime dans l'entrée, et la restitue au format xml.
      • -o - sort vers stdout
      • -- - lit à partir de stdin
        • -- pour arrêter l'analyse des options
        • - pour stdin
    • sed -n "s/<real>\([0-9]*\).*/\1/p") extrait juste le nombre entier de la sortie.
      • -n supprime l'impression par défaut de chaque ligne d'entrée
      • s/a/b/p remplace a par b, en imprimant les lignes correspondantes (en remplacement de -n pour les lignes individuelles)
        • <real> correspond au début de la ligne contenant le nombre entier que nous voulons
        • \(…\) est un groupe de capture
          • [0-9]* correspond à des chiffres un nombre quelconque de fois
        • .* correspond à la fin de la ligne, supprimant ainsi le contenu de la ligne qui ne nous intéresse pas.
        • \1 est le premier groupe de capture
    • | Transmet la sortie de la commande de gauche vers l'entrée de la commande de droite.

Vous pouvez mettre cette commande sur une seule ligne si vous préférez.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X