Last active
October 11, 2017 05:13
-
-
Save keithga/3eab08551c9b21bf543935fc9a6c3b44 to your computer and use it in GitHub Desktop.
Select a disk based on BusType
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<job id="ZTISelectBootDisk"> | |
<script language="VBScript" src="ZTIUtility.vbs"/> | |
<script language="VBScript" src="ZTIDiskUtility.vbs"/> | |
<script language="VBScript"> | |
' // *************************************************************************** | |
' // | |
' // Copyright (c) Microsoft Corporation. All rights reserved. | |
' // | |
' // Microsoft Deployment Toolkit Solution Accelerator | |
' // | |
' // File: ZTISelectBootDisk.wsf | |
' // | |
' // Version: <VERSION> | |
' // | |
' // Purpose: Given a collection of Storage Devices on a machine, | |
' // this program will assist in finding the correct | |
' // device to be processed by "ZTIDiskPart.wsf" | |
' // | |
' // Currently hard coded to select the *FIRST* drive that is | |
' // Not iSCSI, Fibre Channel, Storage Spaces, nor NVMe. | |
' // | |
' // REQUIRES that you install the correct WinPE Storage Components! | |
' // | |
' // | |
' // WARNING: If there are any *other* disks that need to be Cleaned | |
' // and formatted, they should be processed first. | |
' // And this the global Variable OSDDiskIndex should be | |
' // set to <blank> when done being processed by ZTIDiskPart.wsf. | |
' // | |
' // Variables: | |
' // OSDDiskIndex [ Output ] - Disk Index | |
' // | |
' // Usage: | |
' // cscript.exe [//nologo] ZTISelectBootDisk.wsf [/debug:true] | |
' // cscript.exe [//nologo] ZTIDiskPart.wsf [/debug:true] | |
' // cscript.exe [//nologo] ZTISetVariable.wsf [/debug:true] /OSDDiskIndex:"" | |
' // | |
' // *************************************************************************** | |
Option Explicit | |
RunNewInstance | |
'//---------------------------------------------------------------------------- | |
'// Main Class | |
'//---------------------------------------------------------------------------- | |
Class ZTISelectBootDisk | |
'//---------------------------------------------------------------------------- | |
'// Main routine | |
'//---------------------------------------------------------------------------- | |
Function Main | |
Dim oWMIDisk | |
Dim bFound | |
Dim oDiskPartBoot | |
Dim oContext, oLocator, objQuery, objStorageWMI, objStorage | |
oLogging.CreateEntry "---------------- Initialization ----------------", LogTypeInfo | |
IF oEnvironment.Item("DEPLOYMENTTYPE") <> "NEWCOMPUTER" Then | |
oLogging.ReportFailure "Not a new computer scenario, exiting Select Boot Disk.", 7700 | |
End If | |
bFound = FAILURE | |
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' | |
' | |
' 1st Pass - Find any disk that matches the Query "Select * From Win32_diskPartition %OSBootDiskOverrideWQL%" | |
' | |
Set oContext = CreateObject("WbemScripting.SWbemNamedValueSet") | |
oContext.Add "__ProviderArchitecture", 64 | |
Set oLocator = CreateObject("Wbemscripting.SWbemLocator") | |
set objStorageWMI = oLocator.ConnectServer("","root\Microsoft\Windows\Storage","","",,,,oContext) | |
set objQuery = objStorageWMI.ExecQuery("select Number,Size,BusType,Model from MSFT_Disk where BusType <> 6 and BusType <> 9 and BusType <> 16 and BusType <> 17") | |
If objQuery.Count = 0 then | |
oLogging.CreateEntry "No Disk Drives Found!?!?! Dude, did you install the right storage drivers into WinPE 0x7b.",LogTypeError | |
exit function | |
End if | |
For each objStorage in objQuery | |
oLogging.CreateEntry "Found Device: N:" & ObjStorage.Number & " S:" & ObjStorage.Size & " M:" & ObjStorage.Model & " T:" & ObjStorage.BusType & " " , LogTypeInfo | |
oEnvironment.Item("OSDDiskIndex") = ObjStorage.Number | |
bFound = SUCCESS | |
exit for | |
Next | |
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' | |
' | |
' 2nd pass - Use the 1st Partition larger than 15GB on the first disk with a bootable partition. | |
' | |
If bFound = FAILURE then | |
oLogging.CreateEntry "No drive was found using search parameters, Use the 1st \Windows Partition found.", LogTypeInfo | |
set oDiskPartBoot = GetBootDriveEx( false, oEnvironment.Item("ImageBuild"), false ) | |
If not oDiskPartBoot is nothing then | |
oEnvironment.Item("OSDDiskIndex") = oDiskPartBoot.Disk | |
bFound = SUCCESS | |
End if | |
End if | |
TestAndLog bFound = SUCCESS, "Verify OSDDiskIndex was found and set: " & oEnvironment.Item("OSDDiskIndex") | |
Main = bFound | |
End Function | |
End class | |
</script> | |
</job> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment