0Batch script to rename PC based on reserved DHCP name

I use WDS on a stan­dalone serv­er to set up new PCs and to reim­age PCs when they have ended up mangled bey­ond repair. With a good num­ber of PCs in my own house it is use­ful to reim­age them oca­sion­ally when swap­ping or upgrad­ing hard­ware. Most of this pro­cess is now auto­mated by an unattend.xml file but one step the unat­ten­ded pro­cess does­n’t seem to sup­port is renam­ing PCs back to their ori­gin­al name.

All of my PCs have stat­ic DHCP reser­va­tions with their cor­rect host­name (which is also registered in DNS) so I figured there must be a way to pull this inform­a­tion and use it to rename them. After much fid­dling about I have pro­duced a batch script that will do this (when run as admin).

Simple paste the fol­low­ing code into a .cmd file and run it as part of your unat­ten­ded pro­cess (I describe mine below)

@echo off
set ip_address_string="IPv4 Address"
FOR /F "usebackq" %%i IN (`hostname`) DO SET MYVAR=%%i
for /f "usebackq tokens=2 delims=:" %%f in (`ipconfig ^| findstr /c:%ip_address_string%`) do (
    for /f "usebackq tokens=2 delims=:" %%g in (`nslookup %%f ^| findstr /c:Name`) do (
        for /F "tokens=1 delims=." %%a in ("%%g") do (
            for /F "tokens=1 delims= " %%b in ("%%a") do (
                WMIC ComputerSystem where Name="%myvar%" call Rename Name="%%b"
                goto :eof
            )
        )
    )
)

I call my script from the <FirstLogonCommands> sec­tion of ImageUnattend.xml.

<SynchronousCommand wcm:action="add">
  <Order>5</Order>
  <Description>Rename system</Description>
  <CommandLine>c:\extras\elevate -c c:\extras\rename-pc-from-dns.cmd</CommandLine>
</SynchronousCommand>

To run it as admin I use a little util­ity (called elevate.exe) that does this (com­mands run dur­ing setup can elev­ate without pop­ping up a prompt!). You can get it from it’s ori­gin­al source

The final piece of the puzzle for my setup is that I modi­fy the win­dows install image to include an exe file and a little poweer­shell script — these allow the copy­ing of all the oth­er installers from the net­work. The exe file is ‘streams’ which is a sys­in­tern­als (now part of Microsoft) util­ity to remove the “this file came from the inter­net are you sure you want to run it” warning.

I also have the fol­low­ing script as a .ps1 file

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

My first 4 Logon­Com­mands are then as follows…

<SynchronousCommand wcm:action="add">
  <Order>1</Order>
  <Description>No standby during setup</Description>
  <CommandLine>powercfg -change standby-timeout-ac 0</CommandLine>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
  <Order>2</Order>
  <Description>Add credentials for access to server via network</Description>
  <CommandLine>cmdkey /add:wds-server /user:wds-server\administrator /pass:password123</CommandLine>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
  <Order>3</Order>
  <Description>Copy scripts and apps from network to extras folder</Description>
  <CommandLine>C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -windowstyle hidden -ExecutionPolicy ByPass -File C:\Extras\copyapps.ps1</CommandLine>
</SynchronousCommand>
<SynchronousCommand wcm:action="add">
  <Order>4</Order>
  <Description>Remove internet warning from copied apps</Description>
  <CommandLine>C:\Extras\Streams64.exe -d -d -nobanner C:\Extras\*.* /accepteula</CommandLine>
</SynchronousCommand>

Found this useful? Please do let us know by dropping a comment below. If you would like to subscribe please use the subscribe link on the menu at the top right. You can also share this with your friends by using the social links below. Cheers.

Leave a Reply