' // *************************************************************************** ' // ' // Copyright (c) Microsoft Corporation. All rights reserved. ' // ' // Microsoft Deployment Toolkit Solution Accelerator ' // ' // File: DeployWiz_Initialization.vbs ' // ' // Version: 6.3.8456.1000 ' // ' // Purpose: Main Client Deployment Wizard Initialization routines ' // ' // *************************************************************************** Option Explicit Function InitializeComputerName If oProperties("OSDComputerName") = "" then OSDComputerName.Value = oUtility.ComputerName End if If UCase(oEnvironment.Item("SkipComputerName")) = "YES" then OSDComputerName.disabled = true End if End Function Function ValidateComputerName ' Check Warnings ParseAllWarningLabels If Len(OSDComputerName.value) > 15 then InvalidChar.style.display = "none" TooLong.style.display = "inline" ValidateComputerName = false ButtonNext.disabled = true ElseIf IsValidComputerName ( OSDComputerName.Value ) then ValidateComputerName = TRUE InvalidChar.style.display = "none" TooLong.style.display = "none" Else InvalidChar.style.display = "inline" TooLong.style.display = "none" ValidateComputerName = false ButtonNext.disabled = true End if End function '''''''''''''''''''''''''''' Function AddItemToMachineObjectOUOpt(item) Dim oOption set oOption = document.createElement("OPTION") oOption.Value = item oOption.Text = item oOption.Title = item MachineObjectOUOptional.Add oOption MachineObjectOUOptionalBtn.style.display = "inline" End function Function InitializeDomainMembership Dim oLDAP, oOptOU, oItem Dim sFoundFile Dim iRetVal ' Prepopulate the join account details if they are presently blank If Property("DomainAdmin") = "" and Property("DomainAdminDomain") = "" and Property("DomainAdminPassword") = "" then If Property("UserID") <> "" and Property("UserDomain") <> "" and Property("UserPassword") <> "" Then DomainAdmin.value = Property("UserID") DomainAdminDomain.value = Property("UserDomain") DomainAdminPassword.value = Property("UserPassword") End if End if If JoinWorkgroup.value <> "" then JDRadio2.checked = TRUE ElseIf JoinDomain.Value = "" then On Error Resume Next JoinDomain.value = CreateObject("ADSystemInfo").DomainDNSName On Error Goto 0 If JoinDomain.Value = "" then JoinWorkgroup.value = "WORKGROUP" JDRadio2.checked = TRUE Else JDRadio1.checked = TRUE ' Domain.value = JoinDomain.Value On error resume next ' Will extract out the existing OU (if any) for the current machine. set oLDAP = GetObject("LDAP://" & CreateObject("ADSystemInfo").ComputerName) MachineObjectOU.Value = oLDAP.Get("Organizational-Unit-Name") On error goto 0 End if End if '''''''''''''''''''''''''''''''' ' ' Populate OU method #1 - Query ADSI ' MachineObjectOUOptionalBtn.style.display = "none" '''''''''''''''''''''''''''''''' ' ' Populate OU method #2 - Read MachineObjectOUOptional[1...n] property ' If MachineObjectOUOptionalBtn.style.display <> "inline" then oOptOU = Property("DomainOUs") If isarray(oOptOU) then For each oItem in oOptOU AddItemToMachineObjectOUOpt oItem Next MachineObjectOUOptionalBtn.style.display = "inline" ElseIf oOptOU <> "" then AddItemToMachineObjectOUOpt oOptOU End if End if '''''''''''''''''''''''''''''''' ' ' Populate OU method #3 - Read ...\control\DomainOUList.xml ' ' Example: ' ' ' OU=Test1 ' OU=Test2 ' ' If MachineObjectOUOptionalBtn.style.display <> "inline" then iRetVal = oUtility.FindFile( "DomainOUList.xml" , sFoundFile) if iRetVal = SUCCESS then For each oItem in oUtility.CreateXMLDOMObjectEx( sFoundFile ).selectNodes("//DomainOUs/DomainOU") AddItemToMachineObjectOUOpt oItem.text Next End if End if If MachineObjectOUOptionalBtn.style.display = "inline" then document.body.onMouseDown = getRef("DomainMouseDown") document.body.onKeyDown = getRef("MachineObjectOUOptionalKeyPress") End if ValidateDomainMembership End Function Function MachineObjectOUOptionalKeyPress dim OUOpt on error resume next set OUOpt = MachineObjectOUOptional on error goto 0 If isempty(OUOpt) then KeyHandler ElseIf window.event.srcElement is MachineObjectOUOptional then If window.event.keycode = 13 then ' Enter MachineObjectOU.value = MachineObjectOUOptional.value PopupBox.style.display = "none" ElseIf window.event.keycode = 27 then ' escape PopupBox.style.display = "none" End if Else KeyHandler End if End function Function DomainMouseDown If not window.event.srcElement is MachineObjectOUOptional and not window.event.srcElement is MachineObjectOUOptionalBtn then PopupBox.style.display = "none" End if End function Function HideUnHideComboBox If UCase(PopupBox.style.display) <> "NONE" then HideUnhide PopupBox, FALSE document.body.onMouseDown = "" document.body.onKeyDown = getRef("KeyHandler") Else HideUnhide PopupBox, TRUE MachineObjectOUOptional.focus document.body.onMouseDown = getRef("DomainMouseDown") document.body.onKeyDown = getRef("MachineObjectOUOptionalKeyPress") End if End function Function ValidateDomainMembership_Final If JDRadio1.checked then RMPropIfFound("JoinWorkgroup") JoinWOrkgroup.Value = "" Else RMPropIfFound("JoinDomain") JoinDomain.Value = "" End if ValidateDomainMembership_Final = true End function ''''''''''''''''''''''''''''''''''''' ' Validate Domain Membership ' Function ValidateDomainMembership Dim IsDomain Dim r MissingCredentials.style.display = "none" InvalidCredentials.style.display = "none" InvalidOU.style.display = "none" isDomain = JDRadio1.checked If not isDomain then RMPropIfFound("BdeInstall") RMPropIfFound("BdeInstallSuppress") RMPropIfFound("DoCapture") RMPropIfFound("BackupFile") If Property("DeploymentType") <> "REFRESH" and Property("DeploymentType") <> "REPLACE" then RMPropIfFound("ComputerBackupLocation") End if End if If UCase(oEnvironment.Item("SkipDomainMembership")) = "YES" then ' Hide all the domain/workgroup settings DomainSection.style.display = "none" JDRadio1.disabled = true JDRadio2.disabled = true JoinDomain.disabled = true DomainAdmin.disabled = true DomainAdminDomain.disabled = true DomainAdminPassword.disabled = true MachineObjectOU.disabled = true MachineObjectOUOptionalBtn.disabled = true MachineObjectOUOptional.disabled = true JoinWorkgroup.disabled = true ValidateDomainMembership = true ' Don't do any more validation because this has been disabled Exit Function Else JoinDomain.disabled = not isDomain DomainAdmin.disabled = not isDomain DomainAdminDomain.disabled = not isDomain DomainAdminPassword.disabled = not isDomain MachineObjectOU.disabled = not isDomain MachineObjectOUOptionalBtn.disabled = not isDomain MachineObjectOUOptional.disabled = not isDomain JoinWorkgroup.disabled = isDomain End if ' Check Warnings ValidateDomainMembership = ParseAllWarningLabels ' Check domain settings (without validation of credentials) If IsDomain then ' Make sure the join account details are specified If Trim(DomainAdmin.value) = "" or Trim(DomainAdminPassword.value) = "" or (Instr(DomainAdmin.Value, "@") = 0 and Trim(DomainAdminDomain.Value) = "") then MissingCredentials.style.display = "inline" ValidateDomainMembership = false End if ' Check OU to make sure it is a valid format If MachineObjectOU.Value <> "" then ' Make sure it starts with "OU=" or "OU " (equal could be preceeded by spaces) If Left(UCase(Trim(MachineObjectOU.Value)), 3) <> "OU=" and Left(UCase(Trim(MachineObjectOU.Value)), 3) <> "OU " then InvalidOU.style.display = "inline" ValidateDomainMembership = false End if End if End if ' Check credentials If IsDomain and ValidateDomainMembership and (not window.event is Nothing) then ' Only check credentials when the next button is clicked If window.event.srcElement is ButtonNext or window.event.KeyCode = 13 then oLogging.CreateEntry "Validate Domain Credentials [" & DomainAdminDomain.value & "\" & DomainAdmin.value & "]", LogTypeInfo If oEnvironment.Item("OSVersion") <> "WinPE" then ' Check using ADSI (not possible in Windows PE) r = CheckCredentialsAD(DomainAdminDomain.value, DomainAdmin.value, DomainAdminDomain.value, DomainAdminPassword.value) If r <> TRUE then InvalidCredentials.innerText = "* Invalid credentials: " & r InvalidCredentials.style.display = "inline" ValidateDomainMembership = false End if ElseIf oEnvironment.Item("ValidateDomainCredentialsUNC") <> "" then ' Check using ADSI (not possible in Windows PE) oLogging.CreateEntry "Validate Domain Credentials against UNC: " & oEnvironment.Item("ValidateDomainCredentialsUNC") , LogTypeInfo r = CheckCredentials( oEnvironment.Item("ValidateDomainCredentialsUNC") , DomainAdmin.value, DomainAdminDomain.value, DomainAdminPassword.value) oLogging.CreateEntry "Validate Domain Credentials against UNC: result = " & r , LogTypeInfo If r <> TRUE then InvalidCredentials.innerText = "* Invalid credentials: " & r InvalidCredentials.style.display = "inline" ValidateDomainMembership = false End if End if End if End if ' We need to clean up the keyboard hook If ValidateDomainMembership then document.body.onMouseDown = "" End if End Function