Cómo eliminar un equipo de un dominio con PowerShell

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

Obtén acceso

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.

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