Los profesionales de TI y los proveedores de servicios gestionados (MSP) lo saben bien: a veces es necesario desactivar una cuenta local en un equipo Windows por motivos de seguridad, cumplimiento de normativas u otras razones operativas. Obviamente existen herramientas GUI integradas para ello, pero cuando se gestionan varios sistemas, la automatización es clave. Hoy nos adentraremos en un script de PowerShell diseñado para automatizar esta tarea, haciéndola más rápida, segura y fácilmente reproducible.
El script permite desactivar una cuenta local en Windows a través de PowerShell. Este script PowerShell se dirige específicamente a aquellos que buscan cómo deshabilitar un usuario del sistema operativo Windows a través de PowerShell o aquellos que se preguntan cómo desactivar una cuenta local en Windows. Así que, sin más preámbulos, veamos este script en detalle.
El script
#Requires -Version 5.1 <# .SYNOPSIS Disable a local account .DESCRIPTION Disable a local account .EXAMPLE -UserName "AdminTest" Disables the account AdminTest .EXAMPLE PS C:> Disable-LocalAdminAccount.ps1 -UserName "Administrator" Disables the account AdminTest .OUTPUTS None String[] .NOTES Minimum OS Architecture Supported: Windows 10, Windows Server 2016 Release Notes: Initial Release (c) 2023 NinjaOne 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 LocalBuiltInAccountManagement #> [CmdletBinding()] param ( # User name of a local account [Parameter(Mandatory = $true)] [String] $UserName ) 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 ($(Get-Command -Name "Disable-LocalUser" -ErrorAction SilentlyContinue)) { # Disables $UserName using Disable-LocalUser try { Disable-LocalUser $UserName -Confirm:$false } catch { Write-Error $_ exit 1 } } else { # Disables $UserName using net.exe net.exe user $UserName /active:no if ($LASTEXITCODE -gt 0) { exit 1 } } } end {}
Accede a más de 300 scripts en el Dojo de NinjaOne
Entender el guión para desactivar una cuenta local
He aquí un breve resumen:
- el script comienza comprobando si se está ejecutando con privilegios administrativos. Si no, se detiene y lanza un mensaje de error.
- Comprueba la presencia del comando incorporado Disable-LocalUser y, si existe, lo utiliza. En caso contrario, recurre al comando net.exe user para desactivar una cuenta local de un usuario.
El script obliga a rellenar la variable $UserName. Esta es la cuenta local que quieres desactivar.
Requisitos previos
- Requisitos del sistema operativo: la arquitectura mínima de sistema operativo compatible incluye Windows 10 y Windows Server 2016.
- Versión de PowerShell: requiere al menos PowerShell 5.1.
Copia de seguridad y restauración: procede con cautela
Antes de ejecutar cualquier script PowerShell que modifique la configuración del sistema, es fundamental realizar una copia de seguridad de la configuración existente o, mejor aún, de todo el sistema. Esto garantiza que puedas volver al estado anterior en caso de que algo vaya mal. Aquí tienes un par de métodos de copia de seguridad que puedes utilizar:
Punto de restauración del sistema
Crear un punto de restauración del sistema es una forma fácil y eficaz de hacer una copia de seguridad de tu configuración actual. Así es como se hace:
- Abre el menú Inicio y busca “Crear un punto de restauración”
- Haz clic en el resultado correspondiente para abrir la ventana Propiedades del sistema.
- Ve a la pestaña “Protección del sistema” y haz clic en “Crear”
- Dale un nombre a tu punto de restauración y guárdalo.
Cómo realizar una copia de seguridad completa del sistema
Para una copia de seguridad completa, puedes crear una imagen del sistema:
- Abre el Panel de control.
- Ve a “Sistema y seguridad” > “Copia de seguridad y restauración (Windows 7)”
- En el panel izquierdo, haz clic en “Crear una imagen del sistema”
- Sigue las instrucciones del asistente para completar la copia de seguridad.
Nota: prueba siempre el proceso de restauración para asegurarte de que la copia de seguridad es válida.
Gestión de errores: qué hacer cuando las cosas van mal
El script PowerShell para desactivar una cuenta local incluye una gestión básica de errores, pero como con cualquier script, pueden ocurrir. A continuación compartimos algunos errores comunes y consejos para solucionarlos:
“Acceso denegado. Por favor, ejecuta con privilegios de administrador”.
Este error se produce si intentas ejecutar el script sin derechos administrativos. Asegúrate de hacer clic con el botón derecho en la ventana de PowerShell y elegir “Ejecutar como administrador”
La cuenta de usuario no existe
Si introduces un nombre de usuario que no existe, el script para desactivar una cuenta local arrojará un error. Vuelve a comprobar el nombre de usuario e inténtalo de nuevo.
El script no se ejecuta
Si el script no se ejecuta, comprueba la configuración de la política de ejecución de PowerShell. Es posible que tengas que cambiar la política para permitir que se ejecute el script. Utiliza el siguiente comando para cambiarlo:
Set-ExecutionPolicy RemoteSigned
Acuérdate de restablecer la configuración original después de ejecutar el script.
Tratamiento de errores de tipo Catch-All
Si quieres ampliar el alcance del script para registrar los errores en un archivo de texto con fines de auditoría, puedes modificar el bloque catch del script de la siguiente manera:
catch { Write-Error $_ “Error: $_” | Out-File “C:pathtoerrorlog.txt” -Append exit 1 }
Nota: sustituye “C:pathtoerrorlog.txt” por la ruta del archivo de registro que desees.
Al incorporar estos métodos de copia de seguridad y gestión de errores, se añade una capa adicional de seguridad y fiabilidad en el momento de ejecutar el script.
¿Por qué es útil?
Para los profesionales de TI:
- Seguridad: si gestionas la infraestructura informática de una organización, saber cómo desactivar una cuenta local en Windows es crucial, ya que las cuentas no autorizadas o redundantes son un riesgo para la seguridad.
- Conformidad: el cumplimiento de la normativa exige a menudo desactivar determinadas cuentas. La automatización de este proceso garantiza que no se omita ningún paso.
- Automatización y escalabilidad: el script puede incluirse como parte de una secuencia de automatización más amplia, lo que facilita la desactivación de cuentas en muchos equipos simultáneamente.
Para los MSP:
- Multi-Tenancy: los MSP pueden integrar fácilmente este script en sus sistemas de gestión centralizada. Esto simplifica la gestión de varios clientes desde un único panel de control.
- Eficiencia operativa: la capacidad de automatización de este script PowerShell reduce la sobrecarga operativa.
- SLA y satisfacción del cliente: La automatización garantiza tiempos de respuesta más rápidos y el cumplimiento de los SLA, lo que se traduce directamente en la satisfacción del cliente.
Reflexiones finales
Cuando se trata de administrar cuentas locales, el script Disable-LocalAdminAccount.ps1 es una poderosa herramienta que debes tener en tu arsenal. Aprovecha el poder de la automatización y mejora tus medidas de seguridad integrando este script en tus flujos de trabajo. Al fin y al cabo, en el acelerado panorama informático actual, la automatización ya no es un lujo, sino una necesidad.