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