Cómo utilizar PowerShell para establecer contraseñas de administrador local

El mundo de las TI está en constante evolución, con exigencias continuas para mantener la seguridad y el funcionamiento óptimo de los sistemas. Un aspecto vital de estas operaciones es la gestión de las credenciales de los usuarios, especialmente de las cuentas de administrador. El tema de hoy se centra en un script de PowerShell que ayuda a establecer contraseñas de administrador local, una tarea esencial para los profesionales de TI.

Antecedentes

Las credenciales de usuario son los guardianes del acceso dentro de un sistema. La contraseña de administrador, al ser una credencial de acceso de alto nivel, suele exigir cambios oportunos para garantizar la seguridad del sistema. Los profesionales de TI y los proveedores de servicios gestionados (MSP) realizan regularmente tareas que requieren la modificación de estas contraseñas. El script proporcionado simplifica este procedimiento, haciéndolo eficaz y sin errores.

El script para establecer contraseñas de administrador local

#Requires -Version 5.1

<#
.SYNOPSIS
    Sets the local Administrator password.
.DESCRIPTION
    Sets the local Administrator password, or other username.
.EXAMPLE
     -Password "Somepass1"
    Set's the local Administrator account's password to Somepass1
.EXAMPLE
     -UserName "Admin1" -Password "Somepass1"
    Set's the local Administrator account's password to Somepass1, but the account name is Admin1
.EXAMPLE
    PS C:> Set-LocalAdminPassword.ps1 -Password "Somepass1"
    Set's the local Administrator account's password to Somepass1
.OUTPUTS
    None
.NOTES
    Minimum OS Architecture Supported: Windows 10, Windows Server 2016
    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
    LocalUserAccountManagement
#>

[CmdletBinding()]
param (
    [Parameter()]
    [String]
    $UserName = "Administrator",
    [String]
    $Password
)

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 ($PSVersionTable.PSVersion.Major -le 2) {
        & net.exe $UserName $Password
        if ($LASTEXITCODE -gt 0) {
            $Password = $null
            exit $LASTEXITCODE
        }
    }
    else {
        try {
            Set-LocalUser -Name $UserName -Password (ConvertTo-SecureString -String $Password -AsPlainText -Force) -Confirm:$false
        }
        catch {
            Write-Error $_
            $Password = $null
            exit 1
        }
    }
}
end {
    $Password = $null
}

 

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

Obtén acceso

Análisis detallado

Veamos el script por partes para entenderlo mejor:

  • Sección de metadatos: esta parte proporciona una sinopsis, una descripción, ejemplos de cómo utilizar el script, resultados, notas y componentes. Ofrece una visión general instantánea a cualquiera que vea el script por primera vez.
  • Vinculación y parámetros del cmdlet: el script utiliza un cmdlet vinculante, mejorando su funcionalidad con características avanzadas. Toma dos parámetros:
  • $UserName: especifica qué contraseña de usuario cambiar, por defecto “Administrador”.
  • $Password: la nueva contraseña.
  • Bloque de inicio: una función, Test-IsElevated, comprueba si el script se ejecuta con privilegios elevados (de administrador), lo cual es crucial a la hora de alterar las credenciales de usuario.
  • Bloque de proceso: este es el componente principal del script.
  • Primero comprueba si el script tiene derechos elevados, deteniendo la ejecución en caso contrario.
  • Dependiendo de la versión de PowerShell, utiliza diferentes métodos para cambiar la contraseña:
  • Para PowerShell versión 2 o inferior, utiliza el comando net.exe.
  • Para versiones posteriores, el cmdlet Set-LocalUser cambia la contraseña.
  • Bloque final: cualquier dato residual de la contraseña en la variable $Password se borra, asegurando que no queda información sensible.

Posibles casos de uso

Imagina a un profesional de TI, José, en una empresa mediana. Recientemente se han enfrentado a una brecha de seguridad y necesitan cambiar las contraseñas de administrador local en todos los sistemas como medida preventiva. José puede desplegar este script, asegurándose de que todos los ordenadores reciben sus contraseñas de administrador restablecidas de manera eficiente, ahorrando tiempo y reduciendo el error humano.

Comparaciones

Los métodos tradicionales para cambiar contraseñas suelen implicar acceder manualmente a cada sistema o utilizar comandos nativos como net user. Sin embargo, este script ofrece un enfoque más simplificado y automatizado, aprovechando las capacidades de PowerShell. Es más eficaz, sobre todo para las operaciones por lotes en varias máquinas.

FAQ

  • ¿El script puede cambiar las contraseñas de los usuarios que no son administradores?
    Sí, especifica un nombre de usuario diferente utilizando el parámetro -UserName.
  • ¿Qué pasa si ejecuto el script sin privilegios de administrador?
    El script se detendrá y mostrará un mensaje de “Acceso denegado”.

Implicaciones

El uso de scripts de este tipo agiliza las tareas administrativas. Sin embargo, automatizar los cambios de contraseña, si no se hace de forma segura, podría dejar al descubierto nuevas contraseñas. Asegúrate siempre de que la transmisión y el almacenamiento de estos scripts siguen las mejores prácticas de seguridad.

Recomendaciones

  • Ejecuta siempre este tipo de scripts en un entorno seguro.
  • Evita codificar las contraseñas en los scripts. En su lugar, plantéate pasarlas como argumentos o utilizar gestores de credenciales seguros.
  • Actualiza regularmente los scripts para adaptarlos a las últimas versiones del sistema operativo y a las iteraciones de PowerShell.

Reflexiones finales

Herramientas como NinjaOne amplifican el poder de este tipo de scripts. La integración de scripts automatizados en plataformas como NinjaOne garantiza un proceso fluido y sin errores, lo que permite a los profesionales de TI centrarse en tareas más urgentes. La combinación de scripts eficaces con sólidas plataformas de gestión allana el camino hacia una infraestructura de TI segura y eficiente.

 

Categorías:

Quizá también te interese…

×

¡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).