Goal: On a computer running Windows Server 2008 R2, use PowerShell 2.0 to:
- Rename the computer
- Join the computer to a domain
Condition: Steps 1 and 2 must be performed together, i.e., without a computer restart between them
Functions I'm Using
These are the PowerShell functions I've created for each step.
Rename Computer
According to my Internet research, PowerShell 2.0 at one point before release had a built-in cmdlet called Rename-Computer, but it was removed for reasons unknown in CTP 3. My version uses WMI.
function Rename-Computer
{
param ( [Parameter(Mandatory=$true)][string]$name )
process
{
try
{
$computer = Get-WmiObject -Class Win32_ComputerSystem
$result = $computer.Rename($name)
switch($result.ReturnValue)
{
0 { Write-Host "Success" }
5
{
Write-Error "You need administrative rights to execute this cmdlet"
exit
}
default
{
Write-Host "Error - return value of " $result.ReturnValue
exit
}
}
}
catch
{
Write-Host "Exception occurred in Rename-Computer " $Error
}
}
}
Join Computer to Domain
As you can see, this function is really just a wrapper for the built-in cmdlet Add-Computer that gathers the domain name and creates some credentials to use.
function Join-ComputerToDomain
{
param ( [Parameter(Mandatory=$true)][string]$domain )
process
{
try
{
$_domainCredential = $Host.UI.PromptForCredential("Enter domain credentials", "Enter domain credentials to be used when joining computer to the domain", "", "NetBiosUserName")
Add-Computer -DomainName $_domain -cred $_domainCredential
}
catch
{
Write-Error "Exception occurred in Join-ComputerToDomain " $Error
}
}
}
Steps I've Tried
Attempt 1
- Call Rename-Computer
- Call Join-ComputerToDomain
- Restart
Result: Output from Rename-Computer indicates that name was changed, but after restart, name did not change, but computer was joined to domain
Attempt 2
- Call Join-ComputerToDomain
- Call Rename-Computer
- Restart
Result: Return value from Rename-Computer is 1326 (Logon failure: unknown user name or bad password). I assume this is because domain credentials are required for the rename once it's joined to the domain. I attempted to use credentials with the Get-WmiObject call in Rename-Computer, but it threw an error about not being able to use different credentials on the local system.
Attempt 3
- Call Rename-Computer
- Restart
- Call Join-ComputerToDomain
- Restart
Result: Everything works as expected, but extra restart required. Works but I want to eliminate the restart at step 2.