408 lines
9.5 KiB
Plaintext
408 lines
9.5 KiB
Plaintext
' // ***************************************************************************
|
|
' //
|
|
' // 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:
|
|
' <?xml version="1.0" encoding="utf-8"?>
|
|
' <DomainOUs>
|
|
' <DomainOU>OU=Test1</DomainOU>
|
|
' <DomainOU>OU=Test2</DomainOU>
|
|
' </DomainOUs>
|
|
'
|
|
|
|
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
|