Created
November 21, 2017 05:08
-
-
Save keithga/125b6969d05987d29636001c32057695 to your computer and use it in GitHub Desktop.
Suface 1TB fix
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="ZTISurface1TBBootDisk"> | |
<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: ZTISurface1TBBootDisk.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 "ZTISurface1TBBootDisk.wsf" | |
' // | |
' // Currently hard coded to select the *FIRST* disk. | |
' // | |
' // 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 ZTISurface1TBBootDisk | |
'//---------------------------------------------------------------------------- | |
'// 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 | |
IF oEnvironment.Item("Model") <> "Surface Pro" Then | |
oLogging.CreateEntry "Not a surface machine OK!",LogTypeInfo | |
exit function | |
End If | |
bFound = FAILURE | |
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' | |
' | |
' 1st Pass - Find any disk that matches the Query | |
' | |
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 <> 7 and BusType <> 12 and Size > 900000000000") | |
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 | |
elseif objQuery.Count > 1 then | |
oLogging.CreateEntry "more than one disk found",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
Not having much luck with this imaging using SCCM and a brand new 1TB Surface Pro.
It does not pass the NEWCOMPUTER check, nor the model check, so I commented those lines out.
Then it runs but gives the storage error saying no drives detected even though Disk 2 is there and is 952GB (checked using diskpart) so the drivers are there.
Any advice would be appreciated.