Come rinominare i computer Windows con PowerShell

Punti chiave

  • Flessibilità degli script PowerShell: Lo script per rinominare i computer Windows mostra la potenza e la flessibilità di PowerShell nella gestione delle impostazioni del computer, sottolineando l’importanza di PowerShell nella moderna amministrazione IT.
  • Facilità nel rinominare i computer: Lo script analizzato permette ai professionisti IT di rinominare i computer Windows collegati al dominio e quelli non collegati al dominio, e di farlo con facilità.
  • Credenziali dell’amministratore di dominio: Si sottolinea la necessità di disporre di credenziali di amministratore di dominio per rinominare i computer di dominio, a meno che lo script non venga eseguito da un amministratore di dominio.
  • Opzione di riavvio automatico: Lo script per rinominare i computer Windows include una funzione opzionale di riavvio automatico, fondamentale affinché le modifiche abbiano effetto.
  • Considerazioni sulla sicurezza: Si evidenzia l’importanza di gestire le credenziali in modo sicuro negli script, come dimostra la conversione delle password da testo in chiaro a stringhe sicure.
  • Gestione degli errori e convalida: Lo script per rinominare i computer Windows incorpora una solida gestione e validazione degli errori, garantendo un’esecuzione sicura e affidabile.
  • Campi di applicazione pratici: Questa sezione illustra casi d’uso pratici, in particolare per i professionisti IT e i fornitori di servizi gestiti (MSP), per semplificare le attività di gestione dei computer.

Un’efficiente gestione dell’infrastruttura IT è fondamentale per il buon funzionamento delle aziende moderne. Tra le numerose attività, rinominare i computer, in particolare in un ambiente di dominio, può essere cruciale per mantenere l’organizzazione del sistema, aderire alle convenzioni di denominazione e garantire i protocolli di sicurezza. Gli script PowerShell sono diventati strumenti potenti per automatizzare attività come questa, perché offrono precisione, velocità e scalabilità.

Background

Lo script PowerShell che stiamo esaminando è stato progettato per automatizzare il processo per rinominare i computer. Questa funzionalità è particolarmente preziosa per i professionisti IT e i Managed Service Provider (MSP) che gestiscono reti di grandi dimensioni con numerosi computer. Risponde all’esigenza di un approccio coerente e privo di errori alla ridenominazione, fondamentale in ambienti in cui i nomi dei computer sono spesso collegati a ruoli, reparti o criteri di utilizzo specifici.

Lo script per rinominare i computer 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 {
    
    
    
}

 

Accedi a oltre 700 script nel Dojo di NinjaOne

Ottieni l’accesso

Analisi dettagliata dello script per rinominare i computer Windows

Questo script per rinominare i computer Windows opera automatizzando il processo di ridenominazione dei computer Windows, sia di dominio che non uniti a un dominio. Ecco una spiegazione passo per passo:

  • Dichiarazione dei parametri: Lo script per rinominare i computer Windows inizia dichiarando parametri come NewName, DomainUser, DomainPassword e Reboot. Questi input determinano il nome del nuovo computer, le credenziali di dominio e se sia necessario riavviare il computer dopo averlo rinominato.
  • Controlli iniziali e gestione delle credenziali: Controlla le variabili d’ambiente e converte le password testuali in stringhe sicure. Per le operazioni di dominio, trasforma le credenziali dell’utente in un oggetto PowerShell di tipo credenziale.
  • Funzioni: Vengono definite diverse funzioni per verificare se lo script per rinominare i computer Windows viene eseguito con privilegi elevati, se il computer fa parte di un dominio, se lo script viene eseguito come utente di sistema e se l’utente è un amministratore di dominio.
  • Convalida: Lo script per rinominare i computer Windows convalida che sia stato fornito un nuovo nome e che sia diverso da quello attuale. Controlla anche i privilegi amministrativi e la connettività al dominio, se applicabile.
  • Esecuzione: Se tutti i controlli sono superati, viene richiamato il cmdlet Rename-Computer con i parametri appropriati. Questo cmdlet è il comando principale che esegue il processo di ridenominazione.
  • Gestione del riavvio: Se si utilizza l’opzione -Reboot, lo script per rinominare i computer Windows pianifica un riavvio del sistema dopo 5 minuti per applicare le modifiche.

Casi d’uso potenziali

Immagina un MSP che gestisce una rete per una grande organizzazione che sta riorganizzando i propri reparti. L’MSP utilizza questo script per rinominare i computer Windows della rete in modo efficiente, così che riflettano la nuova struttura dei dipartimenti, garantendo in questo modo coerenza e riducendo il lavoro manuale.

Confronti

I metodi tradizionali per rinominare i computer Windows comportano spesso un intervento manuale, effettuato attraverso le proprietà del sistema o gli strumenti del controller di dominio. Questo script per rinominare i computer Windows offre un approccio più snello e a prova di errore, particolarmente utile quando si gestiscono più macchine.

Domande frequenti

D1: Questo script può rinominare i computer in blocco?
R: Sì, anche se potrebbe essere necessario modificarlo per scorrere un elenco di computer e applicare i nuovi nomi.

D2: È sicuro utilizzare password in chiaro nello script per rinominare i computer Windows?
R: Lo script per rinominare i computer Windows converte le password in chiaro in stringhe sicure, migliorando la sicurezza. Tuttavia, si raccomanda di gestire le credenziali con cautela.

D3: Ho bisogno di privilegi amministrativi per eseguire questo script per rinominare i computer Windows?
R: Sì, sono necessari i privilegi di amministrazione, soprattutto per rinominare i computer collegati al dominio.

Implicazioni

Sebbene questo script per rinominare i computer Windows semplifichi un’attività di routine, un uso improprio potrebbe causare conflitti di denominazione, problemi di rete o vulnerabilità di sicurezza. È fondamentale pianificare e controllare le strategie di ridenominazione per garantire l’allineamento con i criteri organizzativi e le norme dell’infrastruttura IT.

Raccomandazioni

  • Testa accuratamente: Esegui lo script per rinominare i computer Windows in un ambiente di prova prima di distribuirlo in produzione.
  • Credenziali sicure: Gestisci e conserva le credenziali in modo sicuro, preferibilmente utilizzando metodi criptati.
  • Modifiche al documento: Conserva un registro delle modifiche per la risoluzione dei problemi e la verifica.

Considerazioni finali

Nel campo della gestione IT, strumenti come NinjaOne offrono soluzioni complete per la gestione e l’automazione delle attività IT. L’integrazione di script come quello per rinominare i computer Windows in un framework di gestione più ampio come NinjaOne può migliorare l’efficienza, ridurre gli errori e fornire un maggiore controllo sugli ambienti IT. Sfruttando la potenza dell’automazione e della gestione centralizzata, i professionisti IT possono concentrarsi su iniziative strategiche piuttosto che su attività di routine.

Passi successivi

La creazione di un team IT efficiente ed efficace richiede una soluzione centralizzata che funga da principale strumento per la fornitura di servizi. NinjaOne consente ai team IT di monitorare, gestire, proteggere e supportare tutti i dispositivi, ovunque essi si trovino, senza la necessità di una complessa infrastruttura locale.

Per saperne di più su NinjaOne Endpoint Management, fai un tour dal vivo, o inizia la tua prova gratuita della piattaforma NinjaOne.

Categorie:

Ti potrebbe interessare anche

×

Guarda NinjaOne in azione!

Inviando questo modulo, accetto La politica sulla privacy di NinjaOne.

Termini e condizioni NinjaOne

Cliccando sul pulsante “Accetto” qui sotto, dichiari di accettare i seguenti termini legali e le nostre condizioni d’uso:

  • Diritti di proprietà: NinjaOne possiede e continuerà a possedere tutti i diritti, i titoli e gli interessi relativi allo script (compreso il copyright). NinjaOne ti concede una licenza limitata per l’utilizzo dello script in conformità con i presenti termini legali.
  • Limitazione d’uso: Puoi utilizzare lo script solo per legittimi scopi personali o aziendali interni e non puoi condividere lo script con altri soggetti.
  • Divieto di ripubblicazione: In nessun caso ti è consentito ripubblicare lo script in una libreria di script appartenente o sotto il controllo di un altro fornitore di software.
  • Esclusione di garanzia: Lo script viene fornito “così com’è” e “come disponibile”, senza garanzie di alcun tipo. NinjaOne non promette né garantisce che lo script sia privo di difetti o che soddisfi le tue esigenze o aspettative specifiche.
  • Assunzione del rischio: L’uso che farai dello script è da intendersi a tuo rischio. Riconosci che l’utilizzo dello script comporta alcuni rischi intrinseci, che comprendi e sei pronto ad assumerti.
  • Rinuncia e liberatoria: Non riterrai NinjaOne responsabile di eventuali conseguenze negative o indesiderate derivanti dall’uso dello script e rinuncerai a qualsiasi diritto legale o di equità e a qualsiasi rivalsa nei confronti di NinjaOne in relazione all’uso dello script.
  • EULA: Se sei un cliente NinjaOne, l’uso dello script è soggetto al Contratto di licenza con l’utente finale (EULA) applicabile.