I have a script here that will add a computer into a domain, but not if the computer account already exists in the domain. My limited VBS skills are preventing me from figuring it out.
'******************************************************************************
' Name: JoinDomain
'
' Purpose: Join a system to a domain
'
' Inputs: strComputer Name of computer
' strDomain Name of domain which the system is to join
' strOU Name of OU where the computer account is to be placed
' strUserName Name of the user which is to be used for the join
' strPassword Password of the user used for the join
'
' Outputs: Sets blnRebootRequired to True if the join succeeds
'
' Requirements: Windows XP or newer OS
'
' Other: This procedure also sets the ActiveComputerName registry entry so that
' the procedure uses the appropriate name during the join.
'
'******************************************************************************
Private Sub JoinDomain(strComputer, strDomain, strOU, strUserName, strPassword)
On Error Resume Next
objLogFile.WriteLine "-->Executing the JoinDomain procedure"
Const JOIN_DOMAIN = 1
Const ACCT_CREATE = 2
Const ACCT_DELETE = 4
Const WIN9X_UPGRADE = 16
Const DOMAIN_JOIN_IF_JOINED = 32
Const JOIN_UNSECURE = 64
Const MACHINE_PASSWORD_PASSED = 128
Const DEFERRED_SPN_SET = 256
Const INSTALL_INVOCATION = 262144
Dim objWMIService
Dim ibjComputer
Dim intError
Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")
For Each objComputer in objWMIService.InstancesOf("Win32_ComputerSystem")
If UCase(objComputer.Domain) = UCase(strDomain) Then
objLogFile.WriteLine vbTab & "No need to change domain membership"
Else
objLogFile.WriteLine vbTab & "Attempting to update the ActiveComputerName"
Set objShell = CreateObject("Wscript.Shell")
Err.Clear
objShell.RegWrite "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\" & _
"ComputerName\ActiveComputerName\ComputerName", _
strComputer, "REG_SZ"
If Err.Number = 0 Then
objLogFile.WriteLine vbTab & "Successfully updated the ActiveComputerName"
Else
objLogFile.WriteLine vbTab & "Error updating the ActiveComputerName"
objLogFile.WriteLine vbTab & Err.Number & " " & Err.Description
blnFatalError = True
End If
Set objShell = Nothing
' If strOU is blank then set it to NULL
If strOU = "" Then strOU = NULL
objLogFile.WriteLine vbTab & "Joining system to the " & strDomain & " domain"
intError = objComputer.JoinDomainOrWorkGroup(strDomain, _
strPassword, _
strDomain & "\" & strUserName, _
strOU, _
JOIN_DOMAIN + ACCT_CREATE)
objLogFile.WriteLine vbTab & GetWMIError(intError)
' Even though the WMI error message usually states that no reboot is required.
' One is definitely required to update.
If intError <= 1 Then
blnRebootRequired = True
Else
blnFatalError = True
End If
End If
Next
Set objWMIService = Nothing
End Sub
That code doesn't work.Fat Burger said:
fly said:That code doesn't work.![]()
itburnswhenipee said:I know I'm late to the party, but....
I don't think the problem is with the script. I think the problem is with the the account running the script. It probably doesn't have right to delete machine accounts, which it needs to re-add a machine to the domain. If the account has account operator rights, at least, you should be okay.