En el sofisticado ecosistema de la gestión de TI, es fundamental garantizar que los dispositivos se unan o eliminen correctamente de un dominio de red. Para los profesionales de TI, esta tarea suele ser repetitiva, pero nunca se insistirá lo suficiente en la importancia de una ejecución perfecta. Hoy nos sumergiremos en un script de PowerShell diseñado para eliminar un equipo de un dominio fácilmente.
Antecedentes
El script proporcionado para eliminar un equipo de un dominio responde a la necesidad específica de automatizar las operaciones de salida de dominio. Los dominios sirven para conglomerar cuentas de usuario, ordenadores y políticas de grupo bajo un mismo techo centralizado. Hay varias razones por las que un profesional de TI puede querer eliminar un ordenador de un dominio, ya sea por seguridad, cambios en la infraestructura o retirada de hardware. Realizar esta tarea manualmente no sólo requiere mucho tiempo, sino que es propensa a errores humanos. Por lo tanto, un script PowerShell robusto como el siguiente tiene un valor incalculable para los profesionales de TI y los proveedores de servicios gestionados (MSP).
El script para eliminar un equipo de un dominio
#Requires -Version 2.0 <# .SYNOPSIS Removes the computer from the domain. .DESCRIPTION Removes the computer from the domain. .EXAMPLE -UserName "MyDomainUser" -Password "Somepass1" -LocalUserName "Administrator" -LocalPassword "Somepass1" Removes the computer from the domain and restarts the computer. .EXAMPLE -UserName "MyDomainUser" -Password "Somepass1" -LocalUserName "Administrator" -LocalPassword "Somepass1" -NoRestart Removes the computer from the domain and does not restart the computer. .EXAMPLE PS C:> Leave-Domain.ps1 -UserName "MyDomainUser" -Password "Somepass1" -LocalUserName "Administrator" -LocalPassword "Somepass1" -NoRestart Removes the computer from the domain and does not restart the computer. .OUTPUTS String[] .NOTES Minimum OS Architecture Supported: Windows 7, Windows Server 2012 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 ( # Use a Domain UserName to remove this computer to a domain, this requires the Password parameter to be used as well [Parameter(Mandatory = $true)] [String] $UserName, # Use a Domain Password to remove a computer from a domain [Parameter(Mandatory = $true)] $Password, # Use a local admin's UserName to remove this computer from a domain, this requires the Password parameter to be used as well [Parameter(Mandatory = $true)] [String] $LocalUserName, # Use a local admin's Password to remove this computer from a domain [Parameter(Mandatory = $true)] $LocalPassword, # Do not restart computer after leaving to a domain [Switch] $NoRestart ) begin { Write-Output "Starting Leave Domain" # Converts username and password into a credential object $LeaveCred = [PSCredential]::new($UserName, $(ConvertTo-SecureString -String $Password -AsPlainText -Force)) # Converts username and password into a credential object $LocalCred = [PSCredential]::new($LocalUserName, $(ConvertTo-SecureString -String $LocalPassword -AsPlainText -Force)) } process { Write-Output "Removing computer($env:COMPUTERNAME) from domain" $script:LeaveResult = $false try { $LeaveResult = if ($NoRestart) { (Remove-Computer -UnjoinDomainCredential $LeaveCred -PassThru -Force -LocalCredential $LocalCred -Confirm:$false).HasSucceeded # Do not restart after leaving } else { # Restart after leaving (Remove-Computer -UnjoinDomainCredential $LeaveCred -PassThru -Force -Restart -LocalCredential $LocalCred -Confirm:$false).HasSucceeded } } catch { Write-Error "Failed to Leave Domain" } if ($LeaveResult) { if ($NoRestart) { Write-Output "Removed computer($env:COMPUTERNAME) from domain and not restarting computer" } else { Write-Output "Removed computer($env:COMPUTERNAME) from domain and restarting computer" } } else { Write-Output "Failed to remove computer($env:COMPUTERNAME) from domain" # Clean up credentials so that they don't leak outside this script $LeaveCred = $null $LocalCred = $null exit 1 } } end { # Clean up credentials so that they don't leak outside this script $LeaveCred = $null $LocalCred = $null Write-Output "Completed Leave Domain" }
Accede a más de 300 scripts en el Dojo de NinjaOne
Desglose detallado
El script para eliminar un equipo de un dominio sigue un planteamiento modular, que abarca tres secciones principales: inicio, proceso y final.
- En la sección inicio, se inicializa el script, se aceptan parámetros como dominio y nombres de usuario/contraseñas locales, y se construyen objetos de credenciales a partir de estos parámetros.
- La sección proceso es donde se produce la operación real. Se utiliza el cmdlet Remove-Computer de PowerShell, una potente herramienta diseñada para eliminar el equipo de su dominio actual La flexibilidad del script permite la opción de reiniciar el ordenador tras la eliminación o dejarlo en ejecución, según prefiera el usuario.
- La sección final tiene que ver con la limpieza y se asegura de que las credenciales utilizadas se borran para evitar posibles problemas de seguridad.
Posibles casos de uso
Imaginemos a Alex, un profesional de TI, que gestiona la infraestructura de red de una empresa mediana. Acaban de retirar varias estaciones de trabajo antiguas y las han sustituido por otras nuevas. En lugar de desvincular manualmente cada ordenador del dominio, Alex utiliza este script, ahorrando horas de trabajo y asegurándose de que no quedan credenciales residuales en los equipos desvinculados.
Comparaciones
Mientras que el método basado en GUI, realizado a través de «Propiedades del sistema», ofrece un enfoque más visual, el script PowerShell destaca por su automatización, escalabilidad y precisión. Para eliminar un solo equipo, la GUI puede ser suficiente, pero para operaciones masivas, PowerShell no tiene rival.
FAQ
- ¿Necesito privilegios administrativos para ejecutar este script? Sí, para eliminar un equipo de un dominio se necesitan privilegios administrativos tanto en el equipo local como en el dominio.
- ¿Qué ocurre si no proporciono el modificador -NoRestart? Por defecto, el ordenador se reiniciará tras ser eliminado del dominio.
Implicaciones
Utilizar este tipo de scripts para eliminar un equipo de un dominio no es sólo una cuestión de comodidad, sino de seguridad. Garantizar que las credenciales no se filtren, como bien hace el script, es de vital importancia. Una eliminación de dominio mal gestionada puede dejar resquicios a los ciberatacantes.
Recomendaciones
- Prueba siempre el script en un entorno controlado antes de desplegarlo en un escenario real.
- Asegúrate de que existen mecanismos de copia de seguridad, especialmente cuando realices cambios masivos.
- Actualiza regularmente el script para adaptarlo a los cambios en el sistema operativo o en los cmdlets de PowerShell.
Reflexiones finales
Aunque los scripts PowerShell como el comentado son increíblemente útiles, el aprovechamiento de plataformas como NinjaOne puede agilizar aún más las operaciones de TI. NinjaOne proporciona una plataforma unificada de supervisión y gestión de TI, integrando a la perfección scripts, automatización y una plétora de tareas de TI en un mismo lugar. Para los profesionales que buscan optimizar sus tareas de gestión de TI, herramientas como este script para eliminar un equipo de un dominio, cuando se integran con plataformas como NinjaOne, ofrecen un horizonte prometedor.