Friday, March 29, 2024

System Administration: Script to Rename a Workstation (VBS)

Datamation content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

Author: Bradly T. Bolin
Platform: Windows NT, Windows 2000
Type: VBScript

This VBS script will remove a workstation from a given NT domain, rename it, and then rejoin it to the domain.

Download the script.
Scroll down to view the script.


'==========================================================================
'
' VBScript Source File
'
' NAME: computer_rename.vbs
'
' AUTHOR: Bradly T. Bolin
' DATE  : 4/5/2001
'
' COMMENT: Removes computer from an NT domain, renames it, then rejoins it
'  Requires NETDOM.EXE from Windows 2000 Resource Kit
'
'==========================================================================

Option Explicit

Dim oFileSystem 'Scripting Dictionary object
Dim oWshShell 'Windows Script Host Shell object
Dim sCurrentName 'holds computername environment variable
Dim oWshEnvironment 'Windows Script Host environment object
Dim sTempDir 'temporary directory of computer on which comprename.vbs is run
Dim sPHASE 'holds number indicating PHASE in rename operation
Dim sProgram 'name of this script
Dim sProgramDir 'Path to this script

Set oFileSystem = CreateObject("Scripting.FileSystemObject")
Set oWshShell = CreateObject("WScript.Shell")
Set oWshEnvironment = oWshShell.Environment("Process")


sCurrentName = oWshEnvironment("COMPUTERNAME")
sTempDir = oWshEnvironment("TEMP")
sProgram = "computer_rename.vbs"
sProgramDir = oFileSystem.GetAbsolutePathName(".")

On Error Resume Next

sPHASE = oWshShell.RegRead("HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonPhase")

Select Case  sPHASE
	Case ""
		Call REMOVE 'Subroutine
	Case "1"
		Call REJOIN 'Subroutine
End Select

'Restart computer
Dim OpSysSet, OpSys
Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//./root/cimv2").ExecQuery("select * from Win32_OperatingSystem where Primary=true")
For Each OpSys In OpSysSet
OpSys.Reboot()
Next
WScript.Quit

'REMOVE Subroutine:  Remove computer from domain, rename it and restart it

Sub REMOVE
	'Create Dictionary (key: Name, item: NewName) and load data into it
	Dim oCompName, oTextStream, sArray, sLine, sNewName
	Dim oDictionary 'VBScript Dictionary Object

	Set oDictionary = CreateObject("Scripting.Dictionary")
	Set oCompName = oFileSystem.GetFile(sProgramDir & "" & "compname.txt")
	Set oTextStream = oCompName.OpenAsTextStream(1)

	Do While Not oTextStream.AtEndOfStream
		sLine = oTextStream.ReadLine
		sArray = Split(sLine, " = ", -1, 1)
		' sArray(0) contains NAME.
		' sArray(1) contains NEWNAME.
		oDictionary.Add sArray(0), sArray(1)
		Loop
		oTextStream.Close

	'Abort if computer is NOT in list of those to be renamed
	If oDictionary.Exists(sCurrentName) = FALSE Then
		MsgBox("Error")
		WScript.Quit
	End If
	'It's OK to proceed, so retrieve new computer name and place in variable sNewName
	sNewName = oDictionary.Item(sCurrentName)
	'Copy files necessary for the rename operation to local machine
	oFileSystem.CopyFile sProgramDir & "" & sProgram, sTempDir & "" & sProgram
	oFileSystem.CopyFile sProgramDir & "" & "NETDOM.EXE", sTempDir & "" & "NETDOM.EXE"
	'Backup user logon name to PreviousName value
	Dim sUserName
	sUserName = oWshShell.RegRead("HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonDefaultUserName")
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonPreviousUser", sUserName
	'Increment PHASE value
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonPhase", 1
	'Place reference to program in RunOnce key
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindowsCurrentVersionRunOnceRUN_RENAME", sTempDir & "" & sProgram
	'Enable AutoAdminLogon
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonAutoAdminLogon", 1
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonDefaultUserName", "XXX"
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonDefaultPassword", "XXX"
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonDefaultDomainName", sNewName

	'Execute NETDOM REMOVE
	oWshShell.Run sTempDir & "" & "NETDOM.EXE REMOVE " & sCurrentName & " /D:XXX /Ud:XXX /Pd:XXX", 1, TRUE
	'Rename computer
	oWshShell.RegWrite "HKLMSYSTEMCurrentControlSetControlComputerNameComputerNameComputerName", sNewName
	oWshShell.RegWrite "HKLMSYSTEMCurrentControlSetServicesTcpipParametersNV Hostname", sNewName
End Sub

'REJOIN Subroutine: Rejoin computer to the domain and clean some stuff up

Sub REJOIN
	'Restore previous user logon name from PreviousUser Value
	Dim sUserName
	sUserName = oWshShell.RegRead("HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonPreviousUser")
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonDefaultUserName", sUserName
	'Delete PHASE value
	oWshShell.RegDelete "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonPhase"
	'Disable AutoAdminLogon
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonAutoAdminLogon", 0
	oWshShell.RegDelete "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonDefaultPassword"
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWinlogonDefaultDomainName", "XXX"
	'Place clean-up routine in RunOnce key
	Dim sCMD
	sCMD = "c:winntsystem32"
	oWshShell.RegWrite "HKLMSOFTWAREMicrosoftWindowsCurrentVersionRunOnceRUN_CLEANUP", sCMD & "CMD.EXE /c DEL " & sTempDir & "" & sProgram
	'Execute NETDOM JOIN
	oWshShell.Run sTempDir & "" & "NETDOM.EXE JOIN " & sCurrentName & " /D:XXX /Ud:XXX /Pd:XXX", 1, TRUE
End Sub

Disclaimer: We hope that the information in these pages is valuable to you. Your use of the information contained in these pages, however, is at your sole risk. All information on these pages is provided “as -is”, without any warranty, whether express or implied, of its accuracy, completeness, fitness for a particular purpose, title or non-infringement, and none of the third-party products or information mentioned in the work are authored, recommended, supported or guaranteed by me. I shall not be liable for any damages you may sustain by using this information, whether direct, indirect, special, incidental or consequential, even if it has been advised of the possibility of such damages.

Subscribe to Data Insider

Learn the latest news and best practices about data science, big data analytics, artificial intelligence, data security, and more.

Similar articles

Get the Free Newsletter!

Subscribe to Data Insider for top news, trends & analysis

Latest Articles