Powershell – Rename computer and join to domain in one step with PowerShell

powershellpowershell-2.0

Goal: On a computer running Windows Server 2008 R2, use PowerShell 2.0 to:

  1. Rename the computer
  2. 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

  1. Call Rename-Computer
  2. Call Join-ComputerToDomain
  3. 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

  1. Call Join-ComputerToDomain
  2. Call Rename-Computer
  3. 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

  1. Call Rename-Computer
  2. Restart
  3. Call Join-ComputerToDomain
  4. Restart

Result: Everything works as expected, but extra restart required. Works but I want to eliminate the restart at step 2.

Best Answer

You can just use Add-Computer, there is a parameter for "-NewName"

Example: Add-Computer -DomainName MYLAB.Local -ComputerName TARGETCOMPUTER -newname NewTARGETCOMPUTER

You might want to check also the parameter "-OPTIONS"

http://technet.microsoft.com/en-us/library/hh849798.aspx

Related Topic