Cómo restablecer contraseñas de usuario mediante PowerShell

La capacidad de gestionar el acceso y las credenciales de los usuarios es un componente esencial de la administración de TI. Tanto si se trata de una gran organización con necesidades informáticas complejas como de una empresa más pequeña con requisitos sencillos, una tarea común es la gestión de contraseñas. El script proporcionado muestra un método para restablecer contraseñas de usuario mediante PowerShell, ya sea para usuarios locales de Windows o dentro de un entorno de Active Directory.

Antecedentes

El script para restablecer contraseñas de usuario está diseñado principalmente para ofrecer a los profesionales de TI y a los proveedores de servicios gestionados (MSP) un método simplificado para restablecer las contraseñas de los usuarios sin tener que sumergirse en las interfaces de usuario del sistema. Con un número cada vez mayor de usuarios y la exigencia constante de aplicar prácticas de seguridad, disponer de una herramienta que realice estas operaciones de forma rápida y fiable tiene un valor incalculable. Este script, especialmente cuando se combina con herramientas como NinjaOne, ofrece automatización y eficiencia para estas tareas.

El script para restablecer contraseñas de usuario

#Requires -Version 5.1

<#
.SYNOPSIS
    Resets a users password.
.DESCRIPTION
    Resets a users password. Either a local user that this script runs on, or in Active directory.
.EXAMPLE
     -UserName "Fred" -Password "Somepass1"
    Resets Fred's password to Somepass1 .
.EXAMPLE
     -UserName "Fred" -Password "Somepass1" -IsDomainUser
    Resets Fred's password to Somepass1 in Active Directory.
.EXAMPLE
    PS C:> .Reset-User-Password.ps1 -UserName "Fred" -Password "Somepass1" -IsDomainUser
    Resets Fred's password to Somepass1 in Active Directory.
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2012
    The RSAT feature for Active Directory needs to be installed on the computer this runs on.
    Release Notes:
    Initial Release
By using this script, you indicate your acceptance of the following legal terms as well as our Terms of Use at https://www.ninjaone.com/terms-of-use.
    Ownership Rights: NinjaOne owns and will continue to own all right, title, and interest in and to the script (including the copyright). NinjaOne is giving you a limited license to use the script in accordance with these legal terms. 
    Use Limitation: You may only use the script for your legitimate personal or internal business purposes, and you may not share the script with another party. 
    Republication Prohibition: Under no circumstances are you permitted to re-publish the script in any script library or website belonging to or under the control of any other software provider. 
    Warranty Disclaimer: The script is provided “as is” and “as available”, without warranty of any kind. NinjaOne makes no promise or guarantee that the script will be free from defects or that it will meet your specific needs or expectations. 
    Assumption of Risk: Your use of the script is at your own risk. You acknowledge that there are certain inherent risks in using the script, and you understand and assume each of those risks. 
    Waiver and Release: You will not hold NinjaOne responsible for any adverse or unintended consequences resulting from your use of the script, and you waive any legal or equitable rights or remedies you may have against NinjaOne relating to your use of the script. 
    EULA: If you are a NinjaOne customer, your use of the script is subject to the End User License Agreement applicable to you (EULA).
.COMPONENT
    ManageUsers
#>

[CmdletBinding()]
param (
    [Parameter(Mandatory = $true)]
    [String]
    $UserName,
    [Parameter(Mandatory = $true)]
    [String]
    $Password,
    [Switch]
    $IsDomainUser
)
    
begin {
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        if ($p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator))
        { Write-Output $true }
        else
        { Write-Output $false }
    }
}
    
process {
    if (-not (Test-IsElevated)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }
    if ($IsDomainUser) {
        # Active Directory
        # Check if the ActiveDirectory module is installed
        if ((Get-Module -Name ActiveDirectory -ListAvailable -ErrorAction SilentlyContinue)) {
            try {
                # Try to import the ActiveDirectory module
                Import-Module -Name ActiveDirectory
            }
            catch {
                Write-Error -Message "Ninja Agent could not access AD, either RSAT was not installed or that the agent does not have permissions to add and remove users from groups."
                exit 5 # Access Denied exit code
            }
            try {
                $User = Get-ADUser -Identity $UserName
                Set-ADAccountPassword -Identity $User -Reset -NewPassword $(ConvertTo-SecureString -String $Password -AsPlainText -Force)    
                Write-Host "Reset Password for user: $UserName"
                exit 0
            }
            catch {
                Write-Host "Failed to Reset Password for user: $UserName"
                exit 1
            }
        }
        else {
            Write-Host "User ($UserName) does not exist."
            exit 1
        }
    }
    else {
        $User = Get-LocalUser -Name $UserName -ErrorAction SilentlyContinue
        if ($User) {
            try {
                Set-LocalUser -Name $UserName -Password $(ConvertTo-SecureString -String $Password -AsPlainText -Force) -Confirm:$false
                Write-Host "Reset Password for user: $UserName"
                exit 0
            }
            catch {
                Write-Host "Failed to Reset Password for user: $UserName"
                exit 1
            }
        }
        else {
            Write-Host "User ($UserName) does not exist."
            exit 1
        }    
    }
}
    
end {}

 

Accede a más de 300 scripts en el Dojo de NinjaOne

Obtén acceso

Análisis detallado

Parámetros: el script para restablecer contraseñas de usuario comienza definiendo los parámetros necesarios, UserName y Password. También existe un modificador opcional para IsDomainUser que, cuando se utiliza, especifica que la operación está destinada a un usuario de Active Directory.

Inicialización

Antes de restablecer las contraseñas de los usuarios, el script para restablecer contraseñas de usuario comprueba si se está ejecutando con privilegios de administrador. Esto se hace utilizando la función Test-IsElevated que comprueba el rol de ejecución actual del script.

Proceso

Dependiendo del valor del modificador IsDomainUser, el script procede con dos operaciones distintas:

  • Active Directory: si el parámetro IsDomainUser está activado, el script comprueba la presencia del módulo ActiveDirectory, lo importa e intenta restablecer la contraseña del usuario en Active Directory.
  • Usuario local: sin el modificador IsDomainUser, el script se dirige a un usuario local, comprobando su existencia e intentando restablecer la contraseña.

Posibles casos de uso

Imagina a un administrador de TI, Juan, que gestiona la infraestructura de red de una empresa mediana. Ha recibido múltiples solicitudes de empleados que han olvidado sus contraseñas. En lugar de restablecerlos manualmente a través de la GUI, Juan utiliza este script. Con una sola orden, ahora puede restablecer la contraseña de cada usuario, lo que le ahorra tiempo y garantiza un enfoque coherente.

Comparaciones

Tradicionalmente, el restablecimiento de contraseñas en Windows o Active Directory requería herramientas basadas en GUI como «Administración de equipos» para usuarios locales o «Usuarios y equipos de Active Directory» para usuarios de AD. Aunque estas herramientas son sólidas y tienen muchas funciones, a menudo implican múltiples pasos. Este script de PowerShell para restablecer contraseñas de usuario ofrece un enfoque de línea de comandos más simplificado que puede integrarse fácilmente en los flujos de trabajo de automatización.

FAQ

  • ¿Se requieren privilegios de administrador? 
    Sí, el script debe ejecutarse con privilegios de administrador.
  • ¿Este script puede gestionar tanto usuarios locales como de AD? 
    Sí, utilizando el modificador IsDomainUser, el script puede dirigirse a usuarios de AD.

Implicaciones

Aunque el script proporciona eficacia, también conlleva el peso de la seguridad. Un uso indebido puede provocar accesos no deseados o bloqueos de cuentas. Asegúrate siempre de que las contraseñas se restablezcan de forma responsable y con el conocimiento del usuario.

Recomendaciones

  • Haz siempre una copia de seguridad antes de realizar cambios a gran escala.
  • Prueba el script en un entorno controlado antes de utilizarlo en producción.
  • Utiliza contraseñas fuertes y únicas al restablecerlas.

Reflexiones finales

Para los profesionales de TI que buscan una mayor automatización y simplicidad en las operaciones, herramientas como NinjaOne pueden complementar este script para restablecer contraseñas de usuario. NinjaOne ofrece sólidas soluciones de gestión de TI que se integran bien con scripts personalizados como éste, lo que permite a los profesionales sacar el máximo partido de su infraestructura. Garantizar que los usuarios puedan acceder de forma segura a sus cuentas es fundamental en la gestión de TI. Gracias a PowerShell y herramientas como NinjaOne, se pueden reducir las complejidades de tareas como el restablecimiento de contraseñas, lo que permite a los equipos de TI centrarse en cuestiones más urgentes.

Próximos pasos

La creación de un equipo de TI próspero y eficaz requiere contar con una solución centralizada que se convierta en tu principal herramienta de prestación de servicios. NinjaOne permite a los equipos de TI supervisar, gestionar, proteger y dar soporte a todos sus dispositivos, estén donde estén, sin necesidad de complejas infraestructuras locales.

Obtén más información sobre NinjaOne Endpoint Management, echa un vistazo a un tour en vivoo tu prueba gratuita de la plataforma NinjaOne.

Categorías:

Quizá también te interese…

Ver demo×
×

¡Vean a NinjaOne en acción!

Al enviar este formulario, acepto la política de privacidad de NinjaOne.

Términos y condiciones de NinjaOne

Al hacer clic en el botón «Acepto» que aparece a continuación, estás aceptando los siguientes términos legales, así como nuestras Condiciones de uso:

  • Derechos de propiedad: NinjaOne posee y seguirá poseyendo todos los derechos, títulos e intereses sobre el script (incluidos los derechos de autor). NinjaOne concede al usuario una licencia limitada para utilizar el script de acuerdo con estos términos legales.
  • Limitación de uso: solo podrás utilizar el script para tus legítimos fines personales o comerciales internos, y no podrás compartirlo con terceros.
  • Prohibición de republicación: bajo ninguna circunstancia está permitido volver a publicar el script en ninguna biblioteca de scripts que pertenezca o esté bajo el control de cualquier otro proveedor de software.
  • Exclusión de garantía: el script se proporciona «tal cual» y «según disponibilidad», sin garantía de ningún tipo. NinjaOne no promete ni garantiza que el script esté libre de defectos o que satisfaga las necesidades o expectativas específicas del usuario.
  • Asunción de riesgos: el uso que el usuario haga del script corre por su cuenta y riesgo. El usuario reconoce que existen ciertos riesgos inherentes al uso del script, y entiende y asume cada uno de esos riesgos.
  • Renuncia y exención: el usuario no hará responsable a NinjaOne de cualquier consecuencia adversa o no deseada que resulte del uso del script y renuncia a cualquier derecho o recurso legal o equitativo que pueda tener contra NinjaOne en relación con su uso del script.
  • CLUF: si el usuario es cliente de NinjaOne, su uso del script está sujeto al Contrato de Licencia para el Usuario Final (CLUF).