' // *************************************************************************** ' // ' // Copyright (c) Microsoft Corporation. All rights reserved. ' // ' // Microsoft Deployment Toolkit Solution Accelerator ' // ' // File: DeployWiz_OfflineData.vbs ' // ' // Version: 6.3.8456.1000 ' // ' // Purpose: Scripts for offline data migration page ' // ' // *************************************************************************** Option Explicit Dim g_hasSomethingBeenChecked Dim g_IsDisk0Bitlocked dim g_OSDrive Dim g_WindowsCount Function AddDiskToTableByDll ( sCmd, EncryptedDrives ) Dim oRow Dim oCol Dim aCmd Dim sDiskID Dim sDiskDesc Dim sSelected Dim sType Dim sArchitecture, sNewArchitecture Dim sDrive Dim iNewVerMajor, iVerMajor AddDiskToTableByDll = false oLogging.CreateEntry "Add Entry to Dialog: " & replace(sCmd,vbTab," "), LogTypeInfo aCmd = split(sCmd,vbTab) If aCmd(0) = "EMPTY" then Exit Function End if oUtility.GetMajorMinorVersion(oEnvironment.Item("ImageBuild")) iNewVerMajor = oUtility.VersionMajor sNewArchitecture = UCase(oEnvironment.Item("ImageProcessor")) sType = "" sSelected = "" sDiskDesc = "Disk " & aCmd(1) & " Partition " & aCmd(2) sDiskID = "Disk" & aCmd(1) & "part" & aCmd(2) If len(aCmd(7)) = 0 then oLogging.CreateEntry "Nothing to display " & sDiskID & " OK TO Skip!", LogTypeInfo exit function ElseIf Instr(1,EncryptedDrives,left(aCmd(7),2),vbTextCompare) <> 0 then ' This drive is BitLockered sDiskDesc = sDiskDesc & "
?? BitLocker Protected ??
" sSelected = "disabled" sType = "" g_IsDisk0Bitlocked = g_IsDisk0Bitlocked or true ' (cint(aCmd(1)) = 0) ElseIf ubound(aCmd) < 8 then oLogging.CreateEntry "Nothing to display Disabled " & sDiskID & " OK TO Skip!", LogTypeInfo exit function ElseIf aCmd(5) < 10000 then oLogging.CreateEntry "Partition too small " & sDiskID & " OK TO Skip! " & aCmd(5), LogTypeInfo exit function ElseIf aCmd(9) < 15000 then ' Not enough Free Space sDiskDesc = sDiskDesc & " [" & aCmd(8) & "]" oLogging.CreateEntry "Not enough disk space on " & sDiskID & " OK TO Skip! " & aCmd(5), LogTypeInfo sSelected = "Unknown" sType = "Drive Full" Else sDrive = Left(aCmd(7),2) If oFSO.FileExists(sDrive & "\Windows\System32\ntoskrnl.exe") Then oUtility.GetMajorMinorVersion(oFSO.GetFileVersion(sDrive & "\Windows\System32\ntoskrnl.exe")) iVerMajor = oUtility.VersionMajor If oFSO.FolderExists(sDrive & "\Program Files (x86)") then sArchitecture = "X64" Else sArchitecture = "X86" End if sDiskDesc = sDiskDesc & " [" & aCmd(8) & "]" ' \Windows" If sArchitecture = "X64" and sNewArchitecture = "X86" then sDiskDesc = sDiskDesc & " [" & aCmd(8) & "]" oLogging.CreateEntry "Existing OS is x64, new OS is x86, user state migration not supported.", LogTypeInfo sSelected = "disabled" sType = "Architecture changing from x64 to x86" ElseIf iVerMajor <= iNewVerMajor then sType = "\Windows " & iVerMajor AddDiskToTableByDll = True If g_hasSomethingBeenChecked <> true and cint(aCmd(1)) = 0 then sSelected = "checked" g_hasSomethingBeenChecked = true g_OSDrive = sDrive End if Else sDiskDesc = sDiskDesc & " [" & aCmd(8) & "]" oLogging.CreateEntry "Existing OS " & sDiskID & " is too new, " & iVerMajor & " > " & iNewVerMajor, LogTypeInfo sSelected = "disabled" sType = "Too new operating system" End if ElseIf oFSO.FileExists(sDrive & "\Winnt\System32\ntoskrnl.exe") Then oUtility.GetMajorMinorVersion(oFSO.GetFileVersion(sDrive & "\Winnt\System32\ntoskrnl.exe")) iVerMajor = oUtility.VersionMajor If oFSO.FolderExists(sDrive & "\Program Files (x86)") then sArchitecture = "X64" Else sArchitecture = "X86" End if sDiskDesc = sDiskDesc & " [" & aCmd(8) & "]" ' \WinNT" If sArchitecture = "X64" and sNewArchitecture = "X86" then sDiskDesc = sDiskDesc & " [" & aCmd(8) & "]" oLogging.CreateEntry "Existing OS is x64, new OS is x86, user state migration not supported.", LogTypeInfo sSelected = "disabled" sType = "Architecture changing from x64 to x86" ElseIf iVerMajor <= iNewVerMajor then sType = "\WinNT " & iVerMajor AddDiskToTableByDll = True If g_hasSomethingBeenChecked <> true and cint(aCmd(1)) = 0 then sSelected = "checked" g_hasSomethingBeenChecked = true g_OSDrive = sDrive End if Else sDiskDesc = sDiskDesc & " [" & aCmd(8) & "]" oLogging.CreateEntry "Existing OS " & sDiskID & " is too new, " & iVerMajor & " > " & iNewVerMajor, LogTypeInfo sSelected = "disabled" sType = "Too new operating system" End if Else sDiskDesc = sDiskDesc & " [" & aCmd(8) & "]" sSelected = "disabled" sType = "No operating system" End if End if ' # ------------------------------------- set oRow = document.createElement("") set oCol = document.createElement("TD") If instr(1,sSelected,"disabled",vbTextCompare) <> 0 then oCol.innerHTML = "" Else oCol.innerHTML = "" End if oRow.appendChild oCol set oCol = document.createElement("TD") oCol.innerHTML = "" oRow.appendChild oCol set oCol = document.createElement("TD") oCol.innerHTML = FormatLargeSize(clng(aCmd(5)) * 1024 * 1024 ) oRow.appendChild oCol set oCol = document.createElement("TD") oCol.innerHTML = sType oRow.appendChild oCol DiskTable.FirstChild.appendChild oRow End Function Function InitializeOfflineDataPage Dim i Dim oDisk Dim EncryptedDrives g_IsDisk0Bitlocked = false for each oDisk in GetObject("winmgmts:\\.\root\CIMV2\Security\MicrosoftVolumeEncryption"). _ ExecQuery("SELECT * FROM Win32_EncryptableVolume WHERE ProtectionStatus = 2",,48) EncryptedDrives = EncryptedDrives & vbTab & oDisk.DriveLetter next oDisk = Empty on error resume next oDisk = oUtility.BDDUtility.HiddenPartitionsToDrives on error goto 0 g_WindowsCount = 0 If not isEmpty(oDisk) then for i = 0 to ubound(oDisk) If ubound(split(oDisk(i),vbTab)) >= 8 then If AddDiskToTableByDll(oDisk(i), EncryptedDrives) then g_WindowsCount = g_WindowsCount + 1 End if End if next End if If g_IsDisk0Bitlocked = true and g_hasSomethingBeenChecked <> true then oLogging.CreateEntry "A supported previous version of Windows was not found on this computer. Suspend BitLocker to save files and settings.", LogTypeInfo UDRadio1.Checked = true UDRadio2.disabled = true MSITTExtInfo.style.display = "inline" MSITText.InnerHTML = "A supported previous version of Windows was not found on this computer. Suspend BitLocker to save files and settings." ElseIf g_WindowsCount = 0 then oLogging.CreateEntry "A supported previous version of Windows was not found on this computer. Data and settings cannot be restored.", LogTypeInfo UDRadio1.Checked = true UDRadio2.disabled = true MSITTExtInfo.style.display = "inline" MSITText.InnerHTML = "A supported previous version of Windows was not found on this computer. Data and settings cannot be restored." Else If g_IsDisk0Bitlocked = true then oLogging.CreateEntry "A BitLocker-protected drive was found. Suspend BitLocker to save files and settings.", LogTypeInfo MSITTExtInfo.style.display = "inline" MSITText.InnerHTML = "A BitLocker-protected drive was found. Suspend BitLocker to save files and settings." End if End if If g_WindowsCount > 1 then for each oDisk in document.getElementsByName("OfflineMigration") oLogging.CreateEntry "OFfline Migration checked: [" & oProperties("OfflineMigration") & "] = [" & oDisk.Value & "]", LogTypeInfo If oProperties("OfflineMigration") <> "" and oProperties("OfflineMigration") = oDisk.Value then oDisk.checked = true exit for End if next MoreThanOneVolume.Style.Display = "inline" if UDRadio1.Checked then NoOffline end if End if KeepPartitions.Disabled = true If UDRadio1.Checked and g_WindowsCount > 0 then KeepPartitions.Disabled = false If oProperties("doNotFormatAndPartition") = "YES" then KeepPartitions.checked = true Else KeepPartitions.checked = false End if End if End function ' -------------------------- Function DriveSelected g_OSDrive = window.event.srcElement.Value oLogging.CreateEntry "Item Selected: " & g_OSDrive, LogTypeInfo End function Function OnlineEnable Dim oDisk for each oDisk in document.getElementsByName("OfflineMigration") If oDisk.Value <> "" then oDisk.Disabled = false End if next KeepPartitions.Disabled = true End function Function NoOffline Dim oDisk for each oDisk in document.getElementsByName("OfflineMigration") oDisk.Disabled = true next If g_WindowsCount > 0 then KeepPartitions.Disabled = false End if End function Function RemovePropertyIfPresent ( oProperty ) If oProperties.Exists( oProperty ) then oProperties.remove oProperty End if End function Function ValidateOfflineData If UDRadio1.Checked then oLogging.CreateEntry "No data to save", LogTypeInfo If KeepPartitions.Checked then oProperties("doNotFormatAndPartition") = "YES" Else RemovePropertyIfPresent "doNotFormatAndPartition" End if RemovePropertyIfPresent "UserDataLocation" RemovePropertyIfPresent "DestinationOSInstallType" RemovePropertyIfPresent "DestinationOSVariable" RemovePropertyIfPresent "OSDisk" RemovePropertyIfPresent "OSDWinPEWindir" RemovePropertyIfPresent "OriginalArchitecture" ElseIf UDRadio2.Checked then oLogging.CreateEntry "Migrate!", LogTypeInfo KeepPartitions.Disabled = true oProperties("doNotFormatAndPartition") = "YES" oProperties("UserDataLocation") = "AUTO" oProperties("DestinationOSInstallType") = "ByVariable" oProperties("DestinationOSVariable") = "OSDisk" oProperties("OSDisk") = g_OSDrive If oFSO.FolderExists(g_OSDrive & "\Windows") then oProperties("OSDWinPEWindir") = g_OSDrive & "\Windows" ElseIf oFSO.FolderExists(g_OSDrive & "\Winnt") then oProperties("OSDWinPEWindir") = g_OSDrive & "\Winnt" End if If oFSO.FolderExists(g_OSDrive & "\Program Files (x86)") then oProperties("OriginalArchitecture") = "X64" Else oProperties("OriginalArchitecture") = "X86" End if End if ValidateOfflineData = true End Function