Como renomear máquinas Windows com o PowerShell

Principais conclusões

  • Flexibilidade do script do PowerShell: O script mostra o poder e a flexibilidade do PowerShell no gerenciamento das configurações do computador, enfatizando a importância do PowerShell na administração moderna de TI.
  • Facilidade de renomear computadores: Destaca a facilidade com que os profissionais de TI podem renomear computadores com e sem domínio.
  • Credenciais de administrador do domínio: Enfatiza a necessidade de credenciais de administrador de domínio para renomear máquinas unidas por domínio, a menos que seja executado por um administrador de domínio.
  • Opção de reinicialização automatizada: O script inclui um recurso opcional de reinicialização automática, que é crucial para que as alterações tenham efeito.
  • Considerações sobre segurança: Destaca a importância de lidar com credenciais de forma segura em scripts, conforme demonstrado pela conversão de senhas de texto simples em cadeias de caracteres seguras.
  • Tratamento de erros e validação: O script incorpora tratamento de erros e validação robustos, garantindo uma execução segura e confiável.
  • Aplicação no mundo real: Ilustra casos práticos de uso, especialmente para profissionais de TI e provedores de serviços gerenciados (MSPs), para simplificar as tarefas de gerenciamento de computadores.

O gerenciamento eficiente da infraestrutura de TI é fundamental para o bom funcionamento das empresas modernas. Entre várias tarefas, renomear computadores, especialmente em um ambiente de domínio, pode ser crucial para manter a organização do sistema, aderir às convenções de nomenclatura e garantir protocolos de segurança. Os scripts do PowerShell surgiram como ferramentas poderosas para automatizar essas tarefas, oferecendo precisão, velocidade e escalabilidade.

Histórico

O script do PowerShell que estamos explorando foi projetado para automatizar o processo de renomeação de computadores. Esse recurso é particularmente valioso para profissionais de TI e provedores de serviços gerenciados (MSPs) que gerenciam grandes redes com várias máquinas. Ele atende à necessidade de uma abordagem consistente e livre de erros para renomear, o que é crucial em ambientes em que os nomes dos computadores geralmente estão alinhados com funções, departamentos ou políticas de uso específicos.

O roteiro:

#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 {
    
    
    
}

 

Acesse mais de 300 scripts no NinjaOne Dojo

Obter acesso

Detalhamento

Esse script funciona automatizando o processo de renomeação de computadores Windows, sejam eles associados ou não ao domínio. Aqui está uma explicação passo a passo:

  • Declaração de parâmetros: O script começa declarando parâmetros como NewName, DomainUser, DomainPassword e Reboot. Essas entradas determinam o novo nome do computador, as credenciais de domínio e a necessidade de reinicializar a máquina após a renomeação.
  • Verificações iniciais e manuseio de credenciais: Ele verifica as variáveis de ambiente e converte senhas de texto simples em cadeias seguras. Para operações de domínio, ele transforma as credenciais de usuário em um objeto de credencial do PowerShell.
  • Funções: Várias funções são definidas para verificar se o script está sendo executado com privilégios elevados, se o computador faz parte de um domínio, se está sendo executado como um usuário do sistema e se o usuário é um administrador de domínio.
  • Validação: O script valida que um novo nome foi fornecido e que ele é diferente do nome atual. Ele também verifica os privilégios administrativos e a conectividade de domínio, se aplicável.
  • Execução: Se todas as verificações forem aprovadas, o cmdlet Rename-Computer será chamado com os parâmetros apropriados. Esse cmdlet é o comando principal que executa o processo de renomeação.
  • Manuseio de reinicialização: Se a opção -Reboot for usada, o script programará uma reinicialização do sistema em 5 minutos para aplicar as alterações.

Casos de uso em potencial

Imagine um MSP gerenciando uma rede para uma grande organização que está reestruturando seus departamentos. O MSP usa esse script para renomear com eficiência os computadores em toda a rede para refletir a nova estrutura departamental, garantindo a consistência e reduzindo o esforço manual.

Comparações

Os métodos tradicionais de renomeação de computadores geralmente envolvem intervenção manual, seja por meio das propriedades do sistema ou das ferramentas do controlador de domínio. Esse script oferece uma abordagem mais simplificada e resistente a erros, particularmente útil ao lidar com várias máquinas.

Implicações

Embora esse script simplifique uma tarefa de rotina, o uso inadequado pode levar a conflitos de nomes, problemas de rede ou vulnerabilidades de segurança. É fundamental planejar e revisar as estratégias de renomeação para garantir que estejam alinhadas às políticas organizacionais e às normas de infraestrutura de TI.

Recomendações

  • Teste minuciosamente: Execute o script em um ambiente de teste antes de implementá-lo na produção.
  • Credenciais seguras: Manuseie e armazene as credenciais com segurança, de preferência usando métodos criptografados.
  • Alterações no documento: Mantenha um registro das alterações para fins de solução de problemas e auditoria.

Considerações finais

No âmbito do gerenciamento de TI, ferramentas como o NinjaOne oferecem soluções abrangentes para gerenciar e automatizar as tarefas de TI. A integração desses scripts a uma estrutura de gerenciamento mais ampla, como o NinjaOne, pode aumentar a eficiência, reduzir erros e proporcionar maior controle sobre os ambientes de TI. Ao aproveitar o poder da automação e do gerenciamento central, os profissionais de TI podem se concentrar em iniciativas estratégicas em vez de tarefas rotineiras.

FAQs

Sim, mas talvez você precise modificá-lo para percorrer uma lista de computadores e seus novos nomes.

O script converte senhas de texto simples em strings seguras, aumentando a segurança. No entanto, é recomendável lidar com as credenciais com cautela.

Sim, são necessários privilégios administrativos, especialmente para renomear computadores associados ao domínio.

Próximas etapas

Montar uma equipe de TI eficaz requer uma solução centralizada que seja a principal ferramenta de entrega de serviços. Com NinjaOne, a TI monitora, gerencia, protege e oferece suporte a todos os dispositivos, onde quer que estejam, dispensando infraestrutura complexa no local.

Saiba mais sobre a solução NinjaOne Remote Script Deployment, agende uma demonstração, ou inicie sua avaliação gratuita da plataforma NinjaOne.

Categorias:

Recomendados para você

Aprimoramento da comunicação de TI: Domínio das mensagens pop-up do PowerShell

Simplifique a configuração de sua VPN: Configurar uma VPN com o PowerShell

Automatização da criação de atalhos para a área de trabalho remota usando o PowerShell

Como criar uma nova conta de usuário local com o PowerShell

Dominando o gerenciamento de energia do Windows: Um guia do PowerShell para profissionais de TI e MSPs

Como renomear máquinas Windows com o PowerShell

Termos e condições NinjaOne

Ao clicar no botão “Aceito” abaixo, você indica sua aceitação dos seguintes termos legais, bem como dos nossos Termos de Uso:

  • Direitos de propriedade: A NinjaOne é proprietária e continuará a ser proprietária de todos os direitos, títulos e interesses relativos ao script (incluindo os direitos autorais). A NinjaOne está concedendo a você uma licença limitada para usar o script de acordo com os presentes termos legais.
  • Limitação de uso: Você só poderá usar o script para fins comerciais internos ou pessoais legítimos, sendo vedado compartilhar o script com terceiros.
  • Proibição de republicação: Em nenhuma circunstância você tem permissão para republicar o script em qualquer biblioteca de scripts pertencente ou sob o controle de qualquer outro fornecedor de software.
  • Isenção de responsabilidade da garantia: O script é fornecido “no estado em que se encontra” e “conforme disponível”, sem qualquer tipo de garantia. A NinjaOne não promete ou garante que o script estará livre de defeitos ou que atenderá às suas necessidades ou expectativas específicas.
  • Assunção de riscos: O uso do script é por sua própria conta e risco. Você reconhece que há certos riscos inerentes ao uso do script, e você compreende e assume cada um desses riscos.
  • Renúncia e isenção de responsabilidade: Você não responsabilizará a NinjaOne por consequências adversas ou não intencionais resultantes do seu uso do script e renunciará a quaisquer direitos ou tutelas legais que possa ter contra a NinjaOne em relação ao seu uso do script.
  • EULA: Se você for cliente da NinjaOne, o uso do script está sujeito ao Contrato de Licença de Usuário Final aplicável a você (EULA).