3 votos

Último cambio de contraseña en macOS

El objetivo es determinar la última vez que se cambió la contraseña para todas las cuentas de usuario en macOS (Catalina).

  1. sudo dscl . -read Users/swastibhushandeb accountPolicyData

Salida:

    creationTime
    1570887333.512722
    failedLoginCount
    0
    failedLoginTimestamp
    0
    passwordLastSetTime
    1570887334.500102
  1. date -r se puede usar para convertir los sellos de tiempo epoch a un formato legible por humanos de la siguiente manera:

date -r 1570887334

¿Cómo se puede envolver lo anterior en un script de bash/un código de una línea? Gracias de antemano.

4voto

siva Puntos 23
date -r $(sudo dscl . -read /Users/username accountPolicyData |
  tail -n +2 |
  plutil -extract passwordLastSetTime xml1 -o - -- - |
  sed -n "s/\([0-9]*\).*/\1/p")
  • date -r tarda algunos segundos.
  • $(…) ejecuta un comando y captura la salida.
    • sudo dscl . -read /Users/… accountPolicyData devuelve accountPolicyData como XML.
    • tail -n +2 elimina la primera línea de la salida del comando anterior, porque dscl imprime información adicional antes de que comience la lista.
    • plutil -extract passwordLastSetTime xml1 -o - -- -
      • -extract passwordLastSetTime xml1 extrae el valor para la clave passwordLastSetTime en la entrada, produciendo como salida xml
      • -o - produce la salida en stdout
      • -- - lee desde stdin
        • -- para detener el análisis de opciones
        • - para stdin
    • sed -n "s/\([0-9]*\).*/\1/p") extrae solo el entero de la salida.
      • -n suprime la impresión por defecto de cada línea de entrada
      • s/a/b/p sustituye a por b, imprimiendo líneas coincidentes (anulando -n para líneas individuales)
        • coincide con el inicio de la línea que contiene el entero que queremos
        • \(…\) es un grupo de captura
          • [0-9]* coincide con dígitos cualquier cantidad de veces
        • .* coincide con el final de la línea, eliminando así el contenido en la línea en el que no estamos interesados
        • \1 es el primer grupo de captura
    • | dirige la salida estándar del comando de la izquierda a la entrada estándar del comando de la derecha

Puedes poner este comando todo en una sola línea si prefieres.

0 votos

Gracias @grg. ¿Hay alguna forma específica de extraer múltiples valores?

0 votos

@swasti No estoy seguro de entender, ¿qué valores? Solo hay un passwordLastSetTime

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X