Contents

PowerShell one-liners: Contraseña nunca expira en usuario local

Después de tres meses desde la última entrada retomamos la sección de PowerShell one-liners. En la entrada de hoy veremos cómo configurar un usuario local para habilitar el flag “La contraseña nunca expira” con PowerShell, y lo haremos siguiendo donde nos quedamos en la entrada anterior, utilizando WMI.

/wp-content/uploads/2018/09/Contraseña-nunca-expira.png
Contraseña nunca expira

¿Por qué modificar un usuario local con WMI y PowerShell?

Si después de leer la introducción de la entrada os ha dado por abrir una terminal de PowerShell con una máquina Windows 10 o 2016 y habéis buscado cmdlets relacionados con usuarios locales habréis visto algo parecido a esto:

/wp-content/uploads/2018/09/Password-usuario-local-no-caduque-PowerShell.png
Password usuario local no caduque PowerShell

No me he vuelto loco, no voy a complicar las cosas con WMI por gusto, el problema de estos cmdlets es que fueron introducidos en PowerShell 5.1, por lo que una máquina recién instalada sólo dispondrá de ellos a partir de Windows 10/2016. Es por ello que, si nos queremos asegurar la retrocompatibilidad con versiones anteriores de sistema operativo, es mejor que lo hagamos con WMI y aseguremos el tiro.

Impedir que el password de un usuario local caduque con PowerShell

Una vez hecha esta pequeña aclaración vamos directos al one-liner:

1
Get-CimInstance -ClassName Win32_UserAccount | Where Name -eq Administrador | Set-CimInstance -Argument @{PasswordExpires=0}

Y como siempre vamos a desglosar la línea:

  • Get-WmiObject -Class Win32_UserAccount: Consultamos la clase Win32_UserAccount, que nos muestra los usuarios locales de nuestra máquina.
  • Where Name -eq Administrador: Filtramos por el usuario administrador.
  • Set-CimInstance: Modificamos el objeto que proviene del pipeline.
  • -Argument @{PasswordExpires=0}: Establecemos la propiedad PasswordExpires a 0 (false).

Si quisieramos hacerlo con los cmdlets de WMI en vez de los de CIM para asegurar aún más la compatibilidad hacia atrás nuestro one-liner sería así:

1
Get-WmiObject -ClassName Win32_UserAccount | Where Name -eq Administrador | Set-WmiInstance -Argument @{PasswordExpires=0}

Y hasta aquí el one-liner de hoy, ¡espero que os ayude en vuestras automatizaciones!