0Script em lote para renomear PC com base no nome DHCP reservado

Eu uso o WDS em um servidor autônomo para configurar novos PCs e recriar PCs quando eles acabam mutilados além do reparo. Com um bom número de PCs na minha própria casa é útil recriá-los ocasionalmente ao trocar ou atualizar o hardware. A maior parte desse processo agora é automatizado por um arquivo unattend.xml, mas uma etapa que o processo autônomo não parece suportar é a renomeação PCs de volta ao nome original.

Todo o meu PCs têm reservas DHCP estáticas com o nome de host correto (que também está registrado em DNS) então imaginei que deveria haver uma maneira de obter essas informações e usá-las para renomeá-las. Depois de muito mexer, produzi um script em lote que fará isso (quando executado como administrador).

Simplesmente cole o código a seguir em um arquivo .cmd e execute-o como parte de seu processo autônomo (Eu descrevo o meu abaixo)

@echo off
set ip_address_string="Endereço IPv4"
PARA / F "usebackq" %%eu IN (`hostname`) DO SET MYVAR=%%i
for /f "usebackq tokens = 2 delims =:" %%f em (`ipconfig ^| findstr / c:%ip_address_string% `) fazer (
    para / f "usebackq tokens = 2 delims =:" %%Gin (`nslookup %% f ^| findstr / c:Nome`) fazer (
        para / F "tokens = 1 delims =." %%um em ("%%g") fazer (
            para / F "tokens = 1 delims = " %%b em ("%%a") fazer (
                WMIC ComputerSystem onde Name ="%myvar%" chamar Renomear Nome ="%%b"
                vamos para :eof
            )
        )
    )
)

Eu chamo meu script do <FirstLogonCommands> seção de ImageUnattend.xml.

<SynchronousCommand wcm:ação ="add">
  <Pedido>5</Pedido>
  <Descrição>Renomear sistema</Descrição>
  <Linha de comando>c:\extras  elevate -c c:\extras  rename-pc-from-dns.cmd</Linha de comando>
</SynchronousCommand>

Para executá-lo como administrador eu uso um pequeno utilitário (chamado elevate.exe) isso faz isso (comandos executados durante a configuração podem ser elevados sem exibir um prompt!). Você pode obtê-lo fonte original

A última peça do quebra-cabeça da minha configuração é que eu modifico a imagem de instalação do Windows para incluir um arquivo exe e um pequeno script powershell - isso permite a cópia de todos os outros instaladores da rede. O arquivo exe é ‘streams' que é um sysinternals (agora parte da Microsoft) utilitário para remover o aviso “este arquivo veio da Internet, você tem certeza de que deseja executá-lo”.

Também tenho o seguinte script como um arquivo .ps1

copy-item -Path \ wds-server  RemInst  Custom  *. * -Destination C:\Extras

Meu primeiro 4 LogonCommands são os seguintes…

<SynchronousCommand wcm:ação ="add">
  <Pedido>1</Pedido>
  <Descrição>Sem espera durante a configuração</Descrição>
  <Linha de comando>powercfg -change standby-timeout-ac 0</Linha de comando>
</SynchronousCommand>
<SynchronousCommand wcm:ação ="add">
  <Pedido>2</Pedido>
  <Descrição>Adicione credenciais para acesso ao servidor via rede</Descrição>
  <Linha de comando>cmdkey / add:wds-server / usuário:wds-server  administrator / pass:senha123</Linha de comando>
</SynchronousCommand>
<SynchronousCommand wcm:ação ="add">
  <Pedido>3</Pedido>
  <Descrição>Copie scripts e aplicativos da rede para a pasta de extras</Descrição>
  <Linha de comando>C:\Windows  System32  WindowsPowerShell  v1.0  powershell.exe -windowstyle oculto -ExecutionPolicy ByPass -File C:\Extras  copyapps.ps1</Linha de comando>
</SynchronousCommand>
<SynchronousCommand wcm:ação ="add">
  <Pedido>4</Pedido>
  <Descrição>Remover aviso de internet de aplicativos copiados</Descrição>
  <Linha de comando>C:\Extras  Streams64.exe -d -d -nobanner C:\Extras  *. * / Aceiteula</Linha de comando>
</SynchronousCommand>

Leave a Reply