So I am finally getting around to posting some of the code from this weeks PowerShell class. As always, I’m listening to my class and I am not afraid to deviate from the lessons when someone comes up with a good idea. While teaching about PowerShell remoting, I was asked if it is possible to rename remote clients. Sure it is!
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $Cred = Get-Credential -Credential MCTExpert\AdminAccount $OldName = "CL1" $NewName = "Client1" 
 Invoke-Command -ComputerName $OldName -ScriptBlock { Param($C, $NN) $Name = HostName $Splat = @{ "NewName" = $NN "Restart" = $True "Force" = $True "PassThru" = $True "DomainCredential" = $C } Rename-Computer @Splat 
 } -ArgumentList $Cred, $NewName | 
| Line | Details | 
| 1 | Ask for the domain credentials of someone who has the rights to rename the computer object in Active Directory | 
| 2 and 3 | The new and old computer name. | 
| 5 | Creates a remote session with the client using the old name. | 
| 6 | This is used to pass information from your client, to the remote client. The first variable $C maps to the $Cred being passing in line 17. The variable $NN maps to $NewName, also being passed in line 17. | 
| 7 | Gets the host machine name for the Rename-Computer cmdlet. | 
| 8 | This is where we create a splat for all the parameters that we will feed Rename-Computer. If you go through the help file for Rename-Computer, you will see what each one does. | 
| 15 | This is where we apply the splat and actually rename the computer. | 
| 17 | This is where we pass information from your client, to the remote one. The information is passed to the Param block on line 6. | 
This is very basic. In practice, I would consider a CSV file containing one column with the old computer name, and another with the new name. I would then pipe this CSV into a more advanced version of this code so I can make things happen a little faster and less manually.
Comments