Cómo renombrar equipos Windows con PowerShell

Puntos clave

  • Flexibilidad de los scripts PowerShell: el script para renombrar equipos Windows muestra la potencia y flexibilidad de PowerShell en la gestión de la configuración de los ordenadores, destacando la importancia de PowerShell en la administración moderna de TI.
  • Facilidad para renombrar equipos: destaca la facilidad con la que los profesionales de TI pueden renombrar tanto los equipos unidos a un dominio como los que no lo están.
  • Credenciales de administrador de dominio: destaca la necesidad de credenciales de administrador de dominio para renombrar máquinas unidas a un dominio a menos que sea ejecutado por un administrador de dominio.
  • Opción de reinicio automático: el script para renombrar equipos Windows incluye una función opcional de reinicio automático, fundamental para que los cambios surtan efecto.
  • Consideraciones de seguridad: subraya la importancia de manejar las credenciales de forma segura en los scripts, como demuestra la conversión de contraseñas de texto plano en cadenas seguras.
  • Gestión de errores y validación: el script para renombrar equipos Windows incorpora una sólida gestión y validación de errores, lo que garantiza una ejecución segura y fiable.
  • Aplicación real: ilustra casos de uso reales, en particular para los profesionales de TI y los proveedores de servicios gestionados (MSP), para simplificar las tareas de gestión informática.

Una gestión de la infraestructura de TI eficiente es fundamental para el buen funcionamiento de las empresas modernas. Entre otras muchas tareas, renombrar equipos, especialmente en un entorno de dominio, puede ser crucial para mantener la organización del sistema, respetar las convenciones de nomenclatura y garantizar los protocolos de seguridad. Los scripts de PowerShell han surgido como potentes herramientas para automatizar dichas tareas, ofreciendo precisión, velocidad y escalabilidad.

Antecedentes

El script PowerShell que vamos a ver está diseñado para automatizar el proceso de renombrar equipos. Esta capacidad es especialmente valiosa para los profesionales de TI y los proveedores de servicios gestionados (MSP) que gestionan grandes redes con numerosos equipos. Responde a la necesidad de un enfoque coherente y sin errores a la hora de renombrar, lo que resulta fundamental en entornos en los que los nombres de los ordenadores suelen estar alineados con funciones específicas, departamentos o políticas de uso.

El script para renombrar equipos Windows

#Requires -Version 5.1

<#
.SYNOPSIS
    Renames either domain-joined or non-domain-joined machines. Requires a Domain Admin's username and password for domain-joined computers, unless run as a Domain Admin.
.DESCRIPTION
    Renames either domain-joined or non-domain-joined machines. Requires a Domain Admin's username and password for domain-joined computers, unless run as a Domain Admin.
.EXAMPLE
    -NewName "ReplaceWithNewName"

    WARNING: The changes will take effect after you restart the computer KYLE-WIN10-TEST.

    HasSucceeded OldComputerName           NewComputerName          
    ------------ ---------------           ---------------          
    True         KYLE-WIN10-TEST           ReplaceWithNewName               



    WARNING: This script takes effect after a reboot. Use -Reboot to have this script reboot for you.

PARAMETER: -DomainUser "UsernameForDomainAdmin" -DomainPassword "SuperSecretPassword1"
    Domain Joined machines require a domain admins creds when not ran as a Domain Admin (System is not a Domain Admin).

PARAMETER: -Reboot
    Reboots the computer 5 minutes after the script is ran.
.EXAMPLE
    -NewName "ReplaceWithNewName" -Reboot

    This is a domain joined machine. Testing for secure domain connection...
    WARNING: The changes will take effect after you restart the computer KYLE-WIN10-TEST.

    HasSucceeded OldComputerName           NewComputerName          
    ------------ ---------------           ---------------          
    True         KYLE-WIN10-TEST           ReplaceWithNewName               

    WARNING: Reboot specified scheduling reboot for 06/13/2023 12:09:53...

.OUTPUTS
    None
.NOTES
    OS: Win 10+, Server 2016+
    Release: 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).
#>

[CmdletBinding()]
param (
    [Parameter()]
    [String]$NewName,
    [Parameter()]
    [String]$DomainUser,
    [Parameter()]
    [String]$DomainPassword,
    [Parameter()]
    [Switch]$Reboot = [System.Convert]::ToBoolean($env:reboot)
)

begin {
    # If script forms are used overwrite the params with those values.
    if ($env:newComputerName -and $env:newComputerName -notlike "null") { $NewName = $env:newComputerName }
    if ($env:domainAdminUsername -and $env:domainAdminUsername -notlike "null") { $DomainUser = $env:domainAdminUsername }
    if ($env:domainAdminPassword -and $env:domainAdminPassword -notlike "null") { 
        $DomainPassword = $env:domainAdminPassword
        # We should overwrite the environmental variable with a secure string 
        $env:domainAdminPassword = $env:domainAdminPassword | ConvertTo-SecureString -AsPlainText -Force 
    }

    # Converts the username and password into a powershell credential object
    if ($DomainUser -and $DomainPassword) {
        $Credential = New-Object System.Management.Automation.PsCredential("$DomainUser", $($DomainPassword | ConvertTo-SecureString -AsPlainText -Force))
    }

    # If a domain password was given we should overwrite it with a secure string
    if ($DomainPassword) {
        $DomainPassword = $DomainPassword | ConvertTo-SecureString -AsPlainText -Force
    }

    # Checks if script is running as an elevated user
    function Test-IsElevated {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        $p.IsInRole([System.Security.Principal.WindowsBuiltInRole]::Administrator)
    }

    # Check if machine is domain joined
    function Test-IsDomainJoined {
        return $(Get-CimInstance -Class Win32_ComputerSystem).PartOfDomain
    }

    # Check if script is running as System
    function Test-IsSystem {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        return $id.Name -like "NT AUTHORITY*" -or $id.IsSystem
    }

    # Check if script is running as a domain admin
    function Test-IsDomainAdmin {
        $id = [System.Security.Principal.WindowsIdentity]::GetCurrent()
        $p = New-Object System.Security.Principal.WindowsPrincipal($id)
        return $p.IsInRole("Domain Admins")
    }

    # Double check that this script has something to do.
    if ($NewName -eq $env:computername) {
        Write-Error "[Error] New name is the same as the current hostname."
        exit 1
    }

    # Error out if not provided with a new name
    if (-not $Newname) {
        Write-Error "[Error] Please specify a name with the NewName parameter!"
        exit 1
    }
}
process {
    # If not running as the system user script needs to be running as an elevated user.
    if (-not (Test-IsElevated) -and -not (Test-IsSystem)) {
        Write-Error -Message "Access Denied. Please run with Administrator privileges."
        exit 1
    }

    # Warn end-users if theyre giving the computer too long of a name.
    if ($NewName.Length -gt 15) {
        Write-Warning -Message "The New Computer Name $NewName exceeds 15 characters! In some instances you may only see the first 15 characters."
    }

    # Preparing Splat
    $ArgumentList = @{
        "ComputerName" = $env:computername
        "Force"        = $True
        "NewName"      = $NewName
        "PassThru"     = $True
    }

    # If it's domain joined we'll have to check a couple things to make sure this is possible
    if (Test-IsDomainJoined) {
        Write-Host -Object "This is a domain joined machine. Testing for secure domain connection..."

        # The domain controller will need to be reachable for the rename to apply
        if (-not (Test-ComputerSecureChannel -ErrorAction Ignore)) {
            Write-Error -Message "[Error] A secure connection to the domain controller cannot be established!
            Please ensure the domain is reachable and there are no machines with identical names!"
            exit 1
        }

        # Domain joined machines require a domain admin to change the name
        if (-not $Credential -and -not (Test-IsDomainAdmin)) {
            Write-Error -Message "[Error] The -DomainUser and -DomainPassword parameter is missing. 
            The username and password for a domain admin is required when not ran as a Domain Admin for domain joined machines!"
            exit 1
        }

        # Adding credentials to the splat
        if ($Credential) {
            $ArgumentList["DomainCredential"] = $Credential
        }
    }

    # Saving the results to check later
    $Result = Rename-Computer @ArgumentList

    # Letting the end-user know the result
    $Result | Format-Table | Out-String | Write-Host

    # Error out on failure
    if (-not $Result.HasSucceeded) {
        Write-Error -Message "[Error] Failed to rename computer!"
        exit 1
    }

    # If a reboot was specified schedule it for 5 minutes from now.
    if ($Reboot) {
        Write-Warning -Message "Reboot specified scheduling reboot for $((Get-Date).AddMinutes(5))..."
        Start-Process -FilePath "cmd.exe" -ArgumentList "/C shutdown.exe /r /t 300"
    }
    else {
        Write-Warning -Message "This script takes effect after a reboot. Use -Reboot to have this script reboot for you."
    }
    exit 0
}
end {
    
    
    
}

 

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

Obtén acceso

Análisis detallado del script para renombrar equipos Windows 

Este script para renombrar equipos Windows opera automatizando el proceso de renombrado de equipos Windows, ya sean unidos a un dominio o no. Aquí tienes una explicación paso a paso:

  • Declaración de parámetros: el script para renombrar equipos Windows comienza declarando parámetros como NewName, DomainUser, DomainPassword y Reboot. Estos inputs determinan el nuevo nombre del ordenador, las credenciales del dominio y si se debe reiniciar el equipo después de cambiar el nombre.
  • Comprobaciones iniciales y gestión de credenciales: comprueba las variables de entorno y convierte las contraseñas de texto plano en cadenas seguras. Para las operaciones de dominio, transforma las credenciales de usuario en un objeto de credenciales PowerShell.
  • Funciones: se definen varias funciones para comprobar si el script se está ejecutando con privilegios elevados, si el equipo forma parte de un dominio, si se está ejecutando como usuario del sistema y si el usuario es un administrador del dominio.
  • Validación: el script para renombrar equipos Windows valida que se ha proporcionado un nuevo nombre y que es diferente del nombre actual. También comprueba los privilegios administrativos y la conectividad de dominio, si procede.
  • Ejecución: si se superan todas las comprobaciones, se llama al cmdlet Rename-Computer con los parámetros adecuados. Este cmdlet es el comando central que ejecuta el proceso de renombrado.
  • Gestión del reinicio: si se utiliza la opción -Reboot, el script programa un reinicio del sistema en 5 minutos para aplicar los cambios.

Posibles casos de uso

Imagina que un MSP gestiona la red de una gran organización que está reestructurando sus departamentos. El MSP utiliza este script para renombrar eficazmente los ordenadores de toda la red de modo que reflejen la nueva estructura departamental, garantizando la coherencia y reduciendo el trabajo manual.

Comparaciones

Los métodos tradicionales para cambiar el nombre de los equipos suelen implicar la intervención manual, ya sea a través de las propiedades del sistema o de las herramientas del controlador de dominio. Este script ofrece un enfoque más sencillo y resistente a errores, particularmente útil cuando se gestionan varias máquinas.

Preguntas frecuentes

P1: ¿Este script puede renombrar un grupo de ordenadores?
R: Sí, pero es posible que tengas que modificarlo para que pase por una lista de ordenadores y sus nuevos nombres.

P2: ¿Es seguro utilizar contraseñas en texto plano en el script?
R: El script convierte las contraseñas en texto plano en cadenas seguras, mejorando la seguridad. Sin embargo, se recomienda manejar las credenciales con precaución.

P3: ¿Necesito privilegios administrativos para ejecutar este script?
R: Sí, se requieren privilegios administrativos, especialmente para renombrar ordenadores conectados a un dominio.

Implicaciones

Aunque este script simplifica una tarea rutinaria, un uso inadecuado podría dar lugar a conflictos de nombres, problemas de red o vulnerabilidades de seguridad. Es fundamental planificar y revisar las estrategias de cambio de nombre para garantizar que se ajustan a las políticas organizativas y a las normas de infraestructura de TI.

Recomendaciones

  • Haz muchas pruebas: ejecuta el script en un entorno de prueba antes de desplegarlo en producción.
  • Protege las credenciales: gestiona y almacena las credenciales de forma segura, preferiblemente utilizando métodos cifrados.
  • Modificaciones en el documento: mantén un registro de los cambios con fines de solución de problemas y auditoría.

Reflexiones finales

En el ámbito de la gestión de TI, herramientas como NinjaOne ofrecen soluciones integrales para gestionar y automatizar las tareas informáticas. La integración de estos scripts en un marco de gestión más amplio como NinjaOne puede mejorar la eficiencia, reducir los errores y proporcionar un mayor control sobre los entornos de TI. Gracias al poder de la automatización y la gestión centralizada, los profesionales de TI pueden olvidarse de las tareas rutinarias y centrarse en iniciativas estratégicas.

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