Claro que sim. O utilitário NETDOM é "seu amigo" neste caso. Você pode usar um script de inicialização para renomear computadores.
Alguns documentos do NETDOM estão aqui:
Eu pude ver um roteiro simplista como este:
@echo off
IF "%COMPUTERNAME%"=="COMPANYNAME-CITY-JOHN" SET NEWNAME=NEWNAME-HERE
IF "%COMPUTERNAME%"=="COMPANYNAME-CITY-BOB" SET NEWNAME=NEWNAME-HERE2
... more machines ...
IF NOT "%NEWNAME%"=="" NETDOM renamecomputer member /newname:%NEWNAME% /userd:USER-TO-PERFORM-RENAME-UNDER /password:PASSWORD-FOR-THAT-USER
Quando todos os computadores forem renomeados, você poderá remover o script de inicialização. Não deve ser muito "caro" rodar em computadores que já foram renomeados. Se você estivesse preocupado com isso, poderia fazer a técnica "trapdoor", na qual o script termina com o computador se colocando em um grupo ao qual foi negado o direito de executar o script.
- Crie um grupo no AD - diga "Renomear computador completo".
- Modifique a permissão do grupo para incluir "Computadores do domínio - Gravar / adicionar self como membro"
- No script de arquivo em lote simplista acima, adicione a linha no final:
IF NOT "%NEWNAME%"=="" NET GROUP "User Creation Script Complete" /DOMAIN /ADD %COMPUTERNAME%$
Você verá esse grupo "aumentar" os computadores membros à medida que eles são executados em cada máquina. Para impedir que o script seja executado em computadores nos quais ele já está em execução, adicione uma permissão ao GPO que atribui o script de inicialização "Renomeação do Computador Concluída - Negar Aplicar Diretiva de Grupo". Então o script será executado uma vez em cada máquina.
Como serão seus nomes de destino? Se você é como eu e como os números de marca de serviço da Dell, você poderia fazer algo assim (no VBScript):
Option Explicit
Dim objWMIService, strNewName, objShell, objNetwork
Set objShell = CreateObject("WScript.Shell")
Set objNetwork = CreateObject("WScript.Network")
' Obtain the service tag
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\.\root\cimv2")
For Each objSMBIOS in objWMIService.ExecQuery("SELECT * FROM Win32_SystemEnclosure")
strNewName = objSMBIOS.SerialNumber
Next
' Check for empty string
If (strNewName = "") Then WScript.Quit
' Does the computer need to be renamed?
If (UCase(strNewName) <> UCase(objNetwork.ComputerName)) Then
objShell.Run "NETDOM renamecomputer member /newname:" & strNewName & " /userd:USER-TO-PERFORM-RENAME-UNDER /password:PASSWORD-FOR-THAT-USER"
End If
Esse script pode ser executado o tempo todo, e constantemente renomear os computadores que não foram nomeados com base em suas tags de serviço ... heh heh. (Eu não tenho certeza se eu realmente faria isso, e se eu fizesse, eu colocaria mais sanidade no script.)