TaskSequence

MDT Tutorial Part 11: Troubleshooting Part 4: Task Sequence Variable is Being Overwritten

Living Table of Contents

 

What These Guides Are:
A guide to help give you some insight into the troubleshooting process in general.

What These Guides Are Not:
A guide to fix all issues you’re going to encounter.

We’re going to role-play a bunch of scenarios and try to work through them.  Remember in math where you had to show your work?  Well, what follows is like that which is why this post is [more than] a [little] lengthy.

Task Sequence Variable is Being Overwritten – The Case of the Incorrectly Named Log Folder

After [finally] fixing your computer naming issue, you decide to take a look at the live BDD.log just to keep an eye on things.  You hop into the TSLogs directory & find 2 directories that have the same time stamp:

Troubleshoot-008

According to your CS.INI the “real” log directory should be named after the machine so how did that other one get created?  You open the BDD.log in BLD-HPV-22404895 and it’s practically empty, but you do see that the property is being set to the other directory.

Troubleshoot-009.PNG

There are some clues in the BDD that lead you to above that point to a smoking gun.

You open the BDD.log in the other directory & scroll to the top & see a familiar set of lines: The same ones you see when testing the CustomSettings.ini manually:

Troubleshoot-011

While the machine is imaging you press F8 to launch a console, fire up CMTrace, open the smsts.log (in %temp%\smstslog), scroll to the top & search downwards for ‘dyn’:

Troubleshoot-012.PNG

Ok, you’re piecing it together:

  1. Initially it’s good, points to the proper location
  2. Then at some point it changes
  3. In the first, short, BDD.log you see ‘Task Sequence’ mentioned
  4. In the second, long, BDD.log you see lines that look like it’s processing the CustomSettings.ini, something that also happens during the Task Sequence,
  5. The smsts.log shows a step that sets a variable
  6. SLShareDynamicLogging isn’t a property (or variable) that is ‘last write wins’, so it can’t be a case of a rogue CustomSettings.ini

So maybe it’s the Task Sequence?

Troubleshoot-013

Bingo was his name.

 

Copypasta Closing

Hopefully these examples will help give you an idea of the overall troubleshooting process.  Most of the time the problems you’ll encounter will be caused by a typso, order of operations or a ‘known issue’ that requires a specific process to be followed.

As you make changes to your environment, here’s what I recommend:

  • Be diligent about keeping a change log so you can easily backtrack
  • Backup your CS.INI or Bootstrap.ini before you make any changes
  • Backup your ts.xml or unattend.xml (in DeploymentShare\Control\TaskSequenceID) before you make any changes
  • Introduce small changes at time with set checkpoints in between and set milestones markers where you backup core files (e.g cs.ini bootstrap.ini ts.xml unattend.xml etc) to help minimize frustration troubleshooting.

And if when you do run into some turbulence, upload relevant logs (at least smsts.log but be prepared to submit others depending on the issue) to a file sharing service like OneDrive, post on TechNet then give a shout to your resources on Twitter.

Good Providence to you!

Advertisements

MDT Tutorial Part 3: Imaging

Living Table of Contents

 

Today’s agenda: Image All The Things!

  • Image a machine with the Build Task Sequence
  • Image a machine with the Build, Sysprep & Capture Task Sequence

Prerequisites

  • Copy the bootable ISOs from the Boot directory in the Deployment Share Share (e.g.: \\MDTServer01\DeploymentShare$\Boot) to your Hyper-V server
  • Add the ISO to your VM
  • Set the DVD Drive as the first boot device
  • Boot your VM
  • Press any key to boot the media.

Build Task Sequence

Once the WinPE environment loads, you’ll be greeted by this window.

SBTS-001

Click ‘Run the Deployment Wizard to install a new Operating System‘ and it will prompt you for credentials.  If you created a dedicated MDT account, good on you – use those.  In my lab (torn down & rebuilt regularly) I just use the local Administrator account.SBTS-003

Assuming you entered the proper credentials, you’ll see the available Task Sequences.
Choose the Task Sequence you created and click next.

SBTS-004

On the ‘Computer Details’ step feel free to enter in a computer name and workgroup name; Or don’t – that’s fine too.

SBTS-005

On the ‘Move Data and Settings’ step you can leave the default, ‘Do not move user data and settings.‘, since there’s nothing to backup/move.

SBTS-006

On the ‘User Data (Restore)’ step leave the default, ‘Do not restore user data and settings.‘ because there’s nothing to restore from.

SBTS-007

On the ‘Locale and Time’ step, adjust the settings accordingly.

SBTS-008

On the ‘Capture Image’ step you can leave the default, ‘Do not capture an image of this computer.‘  Right now we’re just looking to lay down the OS and the B&C will come later.

SBTS-009

On the ‘BitLocker’ step you can leave ‘Do not enable BitLocker for this computer.

SBTS-010

The ‘Ready’ step is really just a summary of the configuration you set above.
Give it a once over to make sure it’s correct and click begin.

SBTS-011

Will run, doing the steps listed in the Task Sequence.  I like to follow along with the VM on one side of the screen and the Task Sequence on the other to ensure things are executing as I expect.  A number of steps take place in WinPE, like laying down the WIM on the disk.

Afterwards the machine will reboot and boot into Windows

Eventually you’ll see the desktop and you might think ‘it’s done’ or that ‘it stalled’ and be tempted to start playing around with it but please don’t!

SBTS-022

Give it a minute and you’ll see the process continue.

After a sigh of relief it’ll move on and finish up very quickly after that.

SBTS-025

Mid Boss Battle Complete!

This is the halfway mark and if this goes smoothly the next step should be just as easy.

Build, Sysprep & Capture Task Sequence

If you didn’t already guess, the Build, Sysprep & Capture – or B&C for Build & Capture because it’s assumed you’re going to sysprep the machine since you don’t want to be in an unsupported situation – process is the same as the above.

  • Add the ISO to your B&C VM
  • Boot from the media
  • Click ‘Run the Deployment Wizard to install a new Operating System
  • Enter your authentication credentials

This time you want to select your B&C Task Sequence

Cap-001

The screens that follow are identical to what you had before, and for the most part everything is the same…

EXCEPT when you get to the ‘Capture Image’ step!
This time we are going to select ‘Capture an image of this reference computer.‘ so that we can capture an image of this machine.  You’re welcome to adjust the Location and File name but the defaults are fine for our purposes.

Cap-007

Again, review your configuration to ensure it’s correct before clicking ‘Begin’

Cap-008

For the most part, it’s exactly the same as before: A number of steps take place in WinPE before rebooting into the OS.

Once in the OS, MDT will start up again, finish up the normal tasks

This slideshow requires JavaScript.

Run sysprep

Cap-010

Stage the boot media

Cap-009

Reboot into WinPE

Cap-012

Initialize the WinPE environment

Cap-013

Capture the WIM

This slideshow requires JavaScript.

Display a summary when complete

Cap-017

A High Five is in Order: Your First B&C via MDT!

Seriously, this is a big deal so request the highest of fives from someone.

The Importance of MDT in a WaaS World

I do not like doing the same thing over and over again, and the idea of building a physical machine that I need to patch, load software onto and configure is not how I want to spend my day.  You can expect a feature update release for Windows 10 twice a year which means you could be asked to perform a B&C twice a year.

So instead of spending days:

  • installing Windows 10
  • thumbing through a 40 page build document
  • locating build change notes scattered across sticky notes scattered throughout desk and emails

I would much rather spend a few hours or a couple of days:

  • cataloguing the OS level configurations required for the organization
  • packaging applications & testing them to ensure they’re complete and work
  • putting it all together in scripts
  • loading all these into MDT

This way I can have reliable, repeatable process for building machines & capturing images.

I promise, once you get this going you’ll never look back.

Good Providence to you!

MDT Tutorial Part 2: Initial Configuration

Living Table of Contents

 

Today’s agenda is to focus on the basics so you can start imaging.

  • Creating a Deployment Share
  • Import an OS into MDT
  • Create a stock Build Task Sequence in MDT
  • Create a stock Build, Sysprep & Capture Task Sequence in MDT
  • Update the Deployment Share

MDT Workbench

The MDT Workbench is where all the action is: It’s where you add your Operating Systems, create & edit your Task Sequences, import your Drivers – basically everything you need to image.  Fire it up and you should see a wonderful blank canvas.

MDT-001

Create Deployment Share

Secondary mouse-click the top-level ‘Deployment Shares’ node and select the option to create a new Deployment Share.

Enter the desired location to create the Deployment Share.NDS-001

Enter a share name for the Deployment Share

NDS-002

Enter a name for your Deployment Share – how you want it to show up in the Deployment Workbench.

NDS-003

These are the default options – I left them as is just for the purposes of documenting the out-of-box experience.

NDS-004

Review the summary to confirm all is well

NDS-005

Within seconds your new Deployment Share will be created.

NDS-006

NDS-007

I want to highlight something really important: The View Script button that exists on just about every MDT screen.  It kicks out code for each action like Creating Deployment Shares, Importing Operating Systems, Updating Deployment Shares etc.

Behind the scenes, this is the underlying code used to create the Deployment Share


New-Item -Path "C:\DeploymentShare" -ItemType directory
New-SmbShare -Name "DeploymentShare$" -Path "C:\DeploymentShare" -FullAccess Administrators
Import-Module "C:\Program Files\Microsoft Deployment Toolkit\bin\MicrosoftDeploymentToolkit.psd1"
new-PSDrive -Name "DS001" -PSProvider "MDTProvider" -Root "C:\DeploymentShare" -Description "MDT Deployment Share" -NetworkPath "\\ITF1MDT01\DeploymentShare$" -Verbose | add-MDTPersistentDrive -Verbose

If you’re new to MDT and PowerShell, this is going to help you turn things around fairly quickly.

Import OS into MDT

Expand the top-level ‘Deployment Shares’ node then expand your newly created ‘MDT Deployment Share’ node to reveal the ‘Operating Systems’ node.

Create a Stock ‘Build’ Task Sequence

Secondary mouse-click on the ‘Task Sequence’ node & select ‘New Task Sequence’

On the first screen enter a Task Sequence ID – this is an identifier for this specific Task Sequence and all ID’s must be unique.

BTS-001

Under ‘Select Template’ leave the default, ‘Standard Client Task Sequence’.BTS-002

Select the Operating System you’re going to deploy.

BTS-003

Accept the default, ‘Do not specify a product key at this time.’

BTS-004

Set the ‘Full Nam’, ‘Organization’ and ‘Internet Explorer Home Page’ options.

BTS-005

Specify a password for the built-in local Administrator account.

BTS-006

Here’s your summary – review everything to ensure it’s correct.

BTS-007

Within seconds your Task Sequence will build.

BTS-008

As before, don’t forget about the ‘View Script’ button:


Import-Module "C:\Program Files\Microsoft Deployment Toolkit\bin\MicrosoftDeploymentToolkit.psd1"
New-PSDrive -Name "DS001" -PSProvider MDTProvider -Root "C:\DeploymentShare"
import-mdttasksequence -path "DS001:\Task Sequences" -Name "Build 1511 amd64 Ent" -Template "Client.xml" -Comments "" -ID "B151164Ent" -Version "1.0" -OperatingSystemPath "DS001:\Operating Systems\Windows 10 Enterprise in 1511_amd64_Ent install.wim" -FullName "Name Full" -OrgName "Org" -HomePage "about:blank" -AdminPassword "my s3kr3t" -Verbose

Create a Stock Build, Sysprep & Capture Task Sequence in MDT

On the heels of creating your build Task Sequence, we’re going to create a Build, Sysprep & Capture Task Sequence something I affectionately call a B&C.

The process is exactly the same as before: Secondary mouse-click on the ‘Task Sequence’ node, select ‘New Task Sequence’ and enter the details:

BCTS-001

Fill in the other fields as you did before, review the summary and execute.

BCTS-002BCTS-004

There’s no difference between what you did before and what you just created; this is intentional.  Later we’ll build off this and it’ll be handy to have a reusable B&C TS ready to go.

Update the Deployment Share

Since the objective is to take MDT for a spin in a straight out of the box configuration, we’re not going to make any customizations to the Deployment Share.  That will come later for sure – let’s just make sure it works before we invest time doing so.

The Deployment Share update process is simple, requires minimal input but does take a while to complete.  The reason we have to do this is to generate the bootable .ISO we’ll need for booting into the MDT WinPE environment to image our test VM’s.

Secondary mouse click on your Deployment Share root node – this would be the ‘MDT Deployment Share’ below:

MDT-002

For our purposes we can leave the default options set and click next.

The process will run for a while.

And it’ll look like it’s stuck in a loop.

This is expected because it’s building the x86 and amd64 images.

UDS-011

Finally it’ll finish

UDS-009

You should see some output like this:

<pre>=== Making sure the deployment share has the latest x86 tools ===

=== Processing LiteTouchPE (x86) boot image ===

Building requested boot image profile.
Determining if any changes have been made in the boot image configuration.
Loading the existing boot image profile for platform x86.
The Windows PE source has changed since a boot image was last generated, so a new image will be created.
Discarding existing boot image profile because a complete rebuild is required.
Calculating hashes for requested content.
Changes have been made, boot image will be updated.
Windows PE WIM C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\en-us\winpe.wim will be used.
WIM file mounted.
Set Windows PE system root.
Set Windows PE scratch space.
Added component winpe-hta
Added component winpe-scripting
Added component winpe-wmi
Added component winpe-securestartup
Added component winpe-fmapi
Added component winpe-mdac
Copy: C:\DeploymentShare\Control\Bootstrap.ini to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Bootstrap.ini
Copy: C:\Program Files\Microsoft Deployment Toolkit\Templates\Unattend_PE_x86.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Unattend.xml
Copy: C:\Program Files\Microsoft Deployment Toolkit\Templates\winpeshl.ini to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Windows\system32\winpeshl.ini
Copy: C:\DeploymentShare\Scripts\LiteTouch.wsf to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\LiteTouch.wsf
Copy: C:\DeploymentShare\Scripts\ZTIUtility.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIUtility.vbs
Copy: C:\DeploymentShare\Scripts\ZTIBCDUtility.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIBCDUtility.vbs
Copy: C:\DeploymentShare\Scripts\ZTIDiskUtility.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIDiskUtility.vbs
Copy: C:\DeploymentShare\Scripts\ZTIDataAccess.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIDataAccess.vbs
Copy: C:\DeploymentShare\Scripts\ZTIConfigFile.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIConfigFile.vbs
Copy: C:\DeploymentShare\Scripts\ZTIGather.wsf to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIGather.wsf
Copy: C:\DeploymentShare\Scripts\ZTIGather.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIGather.xml
Copy: C:\DeploymentShare\Scripts\Wizard.hta to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Wizard.hta
Copy: C:\DeploymentShare\Scripts\Credentials_ENU.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Credentials_ENU.xml
Copy: C:\DeploymentShare\Scripts\Credentials_scripts.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Credentials_scripts.vbs
Copy: C:\DeploymentShare\Scripts\WizUtility.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WizUtility.vbs
Copy: C:\DeploymentShare\Scripts\Wizard.css to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Wizard.css
Copy: C:\DeploymentShare\Scripts\Wizard.ico to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Wizard.ico
Copy: C:\DeploymentShare\Scripts\BackButton.jpg to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\BackButton.jpg
Copy: C:\DeploymentShare\Scripts\plusicon.gif to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\plusicon.gif
Copy: C:\DeploymentShare\Scripts\minusico.gif to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\minusico.gif
Copy: C:\DeploymentShare\Scripts\Summary_Definition_ENU.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Summary_Definition_ENU.xml
Copy: C:\DeploymentShare\Scripts\Summary_scripts.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Summary_scripts.vbs
Copy: C:\DeploymentShare\Scripts\LTICleanup.wsf to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\LTICleanup.wsf
Copy: C:\DeploymentShare\Scripts\BDD_Welcome_ENU.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\BDD_Welcome_ENU.xml
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_Choice.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_Choice.xml
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_Choice.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_Choice.vbs
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_DeployRoot.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_DeployRoot.xml
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_DeployRoot.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_DeployRoot.vbs
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_Initialize.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_Initialize.xml
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_Initialize.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_Initialize.vbs
Copy: C:\DeploymentShare\Scripts\SelectItem.jpg to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\SelectItem.jpg
Copy: C:\DeploymentShare\Scripts\WelcomeBanner.jpg to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeBanner.jpg
Copy: C:\DeploymentShare\Scripts\btnout.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\btnout.png
Copy: C:\DeploymentShare\Scripts\btnover.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\btnover.png
Copy: C:\DeploymentShare\Scripts\btnsel.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\btnsel.png
Copy: C:\DeploymentShare\Scripts\LTIGetFolder.wsf to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\LTIGetFolder.wsf
Copy: C:\DeploymentShare\Scripts\NICSettings_Definition_ENU.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\NICSettings_Definition_ENU.xml
Copy: C:\DeploymentShare\Scripts\ZTINicUtility.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTINicUtility.vbs
Copy: C:\DeploymentShare\Scripts\ZTINicConfig.wsf to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTINicConfig.wsf
Copy: C:\DeploymentShare\Scripts\BackButton.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\BackButton.png
Copy: C:\DeploymentShare\Scripts\FolderIcon.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\FolderIcon.png
Copy: C:\DeploymentShare\Scripts\ItemIcon1.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ItemIcon1.png
Copy: C:\DeploymentShare\Scripts\MinusIcon1.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\MinusIcon1.png
Copy: C:\DeploymentShare\Scripts\PlusIcon1.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\PlusIcon1.png
Copy: C:\DeploymentShare\Scripts\SelectItem.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\SelectItem.png
Copy: C:\DeploymentShare\Scripts\header-image.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\header-image.png
Copy: C:\DeploymentShare\Scripts\NavBar.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\NavBar.png
Copy: C:\DeploymentShare\Scripts\Computer.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Computer.png
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_Background.jpg to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_Background.jpg
Copy: C:\DeploymentShare\Scripts\DeployWiz_Administrator.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\DeployWiz_Administrator.png
Copy: C:\DeploymentShare\Tools\x86\BDDRUN.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Windows\system32\BDDRUN.exe
Copy: C:\DeploymentShare\Tools\x86\WinRERUN.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\WinRERUN.exe
Copy: C:\DeploymentShare\Tools\x86\CcmCore.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\CcmCore.dll
Copy: C:\DeploymentShare\Tools\x86\CcmUtilLib.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\CcmUtilLib.dll
Copy: C:\DeploymentShare\Tools\x86\Smsboot.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\Smsboot.exe
Copy: C:\DeploymentShare\Tools\x86\SmsCore.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\SmsCore.dll
Copy: C:\DeploymentShare\Tools\x86\TsCore.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\TsCore.dll
Copy: C:\DeploymentShare\Tools\x86\TSEnv.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\TSEnv.exe
Copy: C:\DeploymentShare\Tools\x86\TsManager.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\TsManager.exe
Copy: C:\DeploymentShare\Tools\x86\TsmBootstrap.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\TsmBootstrap.exe
Copy: C:\DeploymentShare\Tools\x86\TsMessaging.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\TsMessaging.dll
Copy: C:\DeploymentShare\Tools\x86\TsmBootstrap.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\TsmBootstrap.exe
Copy: C:\DeploymentShare\Tools\x86\TsProgressUI.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\TsProgressUI.exe
Copy: C:\DeploymentShare\Tools\x86\TSResNlc.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\TSResNlc.dll
Copy: C:\DeploymentShare\Tools\x86\CommonUtils.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\CommonUtils.dll
Copy: C:\DeploymentShare\Tools\x86\ccmgencert.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\ccmgencert.dll
Copy: C:\DeploymentShare\Tools\x86\msvcp120.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\msvcp120.dll
Copy: C:\DeploymentShare\Tools\x86\msvcr120.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\msvcr120.dll
Copy: C:\DeploymentShare\Tools\x86\00000409\tsres.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\00000409\tsres.dll
Copy: C:\DeploymentShare\Tools\x86\Microsoft.BDD.Utility.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x86\Microsoft.BDD.Utility.dll
Copy: C:\Program Files\Microsoft Deployment Toolkit\Samples\Background.bmp to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Windows\system32\winpe.bmp
Copying WIM to the deployment share.
Creating an ISO.
Copying ISO to the deployment share.

=== Completed processing platform x86 ===

=== Making sure the deployment share has the latest x64 tools ===

=== Processing LiteTouchPE (x64) boot image ===

Building requested boot image profile.
Determining if any changes have been made in the boot image configuration.
Loading the existing boot image profile for platform x64.
The Windows PE source has changed since a boot image was last generated, so a new image will be created.
Discarding existing boot image profile because a complete rebuild is required.
Calculating hashes for requested content.
Changes have been made, boot image will be updated.
Windows PE WIM C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\en-us\winpe.wim will be used.
WIM file mounted.
Set Windows PE system root.
Set Windows PE scratch space.
Added component winpe-hta
Added component winpe-scripting
Added component winpe-wmi
Added component winpe-securestartup
Added component winpe-fmapi
Added component winpe-mdac
Copy: C:\DeploymentShare\Control\Bootstrap.ini to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Bootstrap.ini
Copy: C:\Program Files\Microsoft Deployment Toolkit\Templates\Unattend_PE_x64.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Unattend.xml
Copy: C:\Program Files\Microsoft Deployment Toolkit\Templates\winpeshl.ini to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Windows\system32\winpeshl.ini
Copy: C:\DeploymentShare\Scripts\LiteTouch.wsf to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\LiteTouch.wsf
Copy: C:\DeploymentShare\Scripts\ZTIUtility.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIUtility.vbs
Copy: C:\DeploymentShare\Scripts\ZTIBCDUtility.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIBCDUtility.vbs
Copy: C:\DeploymentShare\Scripts\ZTIDiskUtility.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIDiskUtility.vbs
Copy: C:\DeploymentShare\Scripts\ZTIDataAccess.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIDataAccess.vbs
Copy: C:\DeploymentShare\Scripts\ZTIConfigFile.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIConfigFile.vbs
Copy: C:\DeploymentShare\Scripts\ZTIGather.wsf to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIGather.wsf
Copy: C:\DeploymentShare\Scripts\ZTIGather.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTIGather.xml
Copy: C:\DeploymentShare\Scripts\Wizard.hta to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Wizard.hta
Copy: C:\DeploymentShare\Scripts\Credentials_ENU.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Credentials_ENU.xml
Copy: C:\DeploymentShare\Scripts\Credentials_scripts.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Credentials_scripts.vbs
Copy: C:\DeploymentShare\Scripts\WizUtility.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WizUtility.vbs
Copy: C:\DeploymentShare\Scripts\Wizard.css to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Wizard.css
Copy: C:\DeploymentShare\Scripts\Wizard.ico to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Wizard.ico
Copy: C:\DeploymentShare\Scripts\BackButton.jpg to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\BackButton.jpg
Copy: C:\DeploymentShare\Scripts\plusicon.gif to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\plusicon.gif
Copy: C:\DeploymentShare\Scripts\minusico.gif to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\minusico.gif
Copy: C:\DeploymentShare\Scripts\Summary_Definition_ENU.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Summary_Definition_ENU.xml
Copy: C:\DeploymentShare\Scripts\Summary_scripts.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Summary_scripts.vbs
Copy: C:\DeploymentShare\Scripts\LTICleanup.wsf to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\LTICleanup.wsf
Copy: C:\DeploymentShare\Scripts\BDD_Welcome_ENU.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\BDD_Welcome_ENU.xml
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_Choice.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_Choice.xml
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_Choice.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_Choice.vbs
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_DeployRoot.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_DeployRoot.xml
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_DeployRoot.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_DeployRoot.vbs
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_Initialize.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_Initialize.xml
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_Initialize.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_Initialize.vbs
Copy: C:\DeploymentShare\Scripts\SelectItem.jpg to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\SelectItem.jpg
Copy: C:\DeploymentShare\Scripts\WelcomeBanner.jpg to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeBanner.jpg
Copy: C:\DeploymentShare\Scripts\btnout.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\btnout.png
Copy: C:\DeploymentShare\Scripts\btnover.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\btnover.png
Copy: C:\DeploymentShare\Scripts\btnsel.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\btnsel.png
Copy: C:\DeploymentShare\Scripts\LTIGetFolder.wsf to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\LTIGetFolder.wsf
Copy: C:\DeploymentShare\Scripts\NICSettings_Definition_ENU.xml to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\NICSettings_Definition_ENU.xml
Copy: C:\DeploymentShare\Scripts\ZTINicUtility.vbs to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTINicUtility.vbs
Copy: C:\DeploymentShare\Scripts\ZTINicConfig.wsf to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ZTINicConfig.wsf
Copy: C:\DeploymentShare\Scripts\BackButton.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\BackButton.png
Copy: C:\DeploymentShare\Scripts\FolderIcon.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\FolderIcon.png
Copy: C:\DeploymentShare\Scripts\ItemIcon1.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\ItemIcon1.png
Copy: C:\DeploymentShare\Scripts\MinusIcon1.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\MinusIcon1.png
Copy: C:\DeploymentShare\Scripts\PlusIcon1.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\PlusIcon1.png
Copy: C:\DeploymentShare\Scripts\SelectItem.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\SelectItem.png
Copy: C:\DeploymentShare\Scripts\header-image.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\header-image.png
Copy: C:\DeploymentShare\Scripts\NavBar.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\NavBar.png
Copy: C:\DeploymentShare\Scripts\Computer.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\Computer.png
Copy: C:\DeploymentShare\Scripts\WelcomeWiz_Background.jpg to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\WelcomeWiz_Background.jpg
Copy: C:\DeploymentShare\Scripts\DeployWiz_Administrator.png to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Scripts\DeployWiz_Administrator.png
Copy: C:\DeploymentShare\Tools\x64\BDDRUN.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Windows\system32\BDDRUN.exe
Copy: C:\DeploymentShare\Tools\x64\WinRERUN.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\WinRERUN.exe
Copy: C:\DeploymentShare\Tools\x64\CcmCore.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\CcmCore.dll
Copy: C:\DeploymentShare\Tools\x64\CcmUtilLib.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\CcmUtilLib.dll
Copy: C:\DeploymentShare\Tools\x64\Smsboot.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\Smsboot.exe
Copy: C:\DeploymentShare\Tools\x64\SmsCore.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\SmsCore.dll
Copy: C:\DeploymentShare\Tools\x64\TsCore.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\TsCore.dll
Copy: C:\DeploymentShare\Tools\x64\TSEnv.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\TSEnv.exe
Copy: C:\DeploymentShare\Tools\x64\TsManager.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\TsManager.exe
Copy: C:\DeploymentShare\Tools\x64\TsmBootstrap.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\TsmBootstrap.exe
Copy: C:\DeploymentShare\Tools\x64\TsMessaging.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\TsMessaging.dll
Copy: C:\DeploymentShare\Tools\x64\TsmBootstrap.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\TsmBootstrap.exe
Copy: C:\DeploymentShare\Tools\x64\TsProgressUI.exe to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\TsProgressUI.exe
Copy: C:\DeploymentShare\Tools\x64\TSResNlc.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\TSResNlc.dll
Copy: C:\DeploymentShare\Tools\x64\CommonUtils.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\CommonUtils.dll
Copy: C:\DeploymentShare\Tools\x64\ccmgencert.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\ccmgencert.dll
Copy: C:\DeploymentShare\Tools\x64\msvcp120.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\msvcp120.dll
Copy: C:\DeploymentShare\Tools\x64\msvcr120.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\msvcr120.dll
Copy: C:\DeploymentShare\Tools\x64\00000409\tsres.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\00000409\tsres.dll
Copy: C:\DeploymentShare\Tools\x64\Microsoft.BDD.Utility.dll to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Deploy\Tools\x64\Microsoft.BDD.Utility.dll
Copy: C:\Program Files\Microsoft Deployment Toolkit\Samples\Background.bmp to C:\Users\ADMINI~1\AppData\Local\Temp\2\MDTUpdate.3008\Mount\Windows\system32\winpe.bmp
Copying WIM to the deployment share.
Creating an ISO.
Copying ISO to the deployment share.

=== Completed processing platform x64 ===

=== Processing complete ===

</pre>

Don’t forget to grab that code by the ‘View Script’ button!

So you’re all set!

Wait – did something go wrong?  Are you seeing an error?  Something like this?

UDS-010

With text that reads:

<pre>=== Making sure the deployment share has the latest x86 tools ===

=== Processing LiteTouchPE (x86) boot image ===

Building requested boot image profile.
Determining if any changes have been made in the boot image configuration.
Loading the existing boot image profile for platform x86.
The Windows PE source has changed since a boot image was last generated, so a new image will be created.
Discarding existing boot image profile because a complete rebuild is required.
Calculating hashes for requested content.
Changes have been made, boot image will be updated.
Windows PE WIM C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\x86\en-us\winpe.wim will be used.
Unable to mount the WIM, so the update process cannot continue.

=== Completed processing platform x86 ===

=== Making sure the deployment share has the latest x64 tools ===

=== Processing LiteTouchPE (x64) boot image ===

Building requested boot image profile.
Determining if any changes have been made in the boot image configuration.
Loading the existing boot image profile for platform x64.
The Windows PE source has changed since a boot image was last generated, so a new image will be created.
Discarding existing boot image profile because a complete rebuild is required.
Calculating hashes for requested content.
Changes have been made, boot image will be updated.
Windows PE WIM C:\Program Files (x86)\Windows Kits\10\Assessment and Deployment Kit\Windows Preinstallation Environment\amd64\en-us\winpe.wim will be used.
Unable to mount the WIM, so the update process cannot continue.

=== Completed processing platform x64 ===

=== Processing complete ===

</pre>

Did you remember to apply the patch mentioned in the previous post?  If not, apply the patch and try again.  If you did apply the patch, further troubleshooting is required and I recommend posting on the TechNet Forums and Twitter.  You’re more than welcome to post here – happy to help in anyway I can – but the reality is there your issue will get far more visibility on those two platforms than here 🙂

Objective Complete!

That’s it for now but you’re essentially ready to start imaging.  If you’re feeling adventurous, try imaging one of your VMs.

Until next time, Good Providence to you!

Task Sequence Fails to Start 0x80041032

Recommended reading: https://blogs.msdn.microsoft.com/steverac/2014/08/25/policy-flow-the-details/

After preparing a 1730 upgrade Task Sequence for our 1607 machines, I kicked it off on a box via Software Center and walked away once the status changed to ‘Installing thinking I’d come back to an upgraded machine an hour later.  To my surprise, I was still logged on and the TS was still ‘running’.  A few hours later the button was back to ‘Install’ with a status of ‘Available’.  Thinking I goofed I tried again and the same thing happened.

I assumed it was unique to this one machine so I tried it on another and it behaved the same way.  I then ran the upgrade sequence on 5 other machines and they all exhibited the same behavior.  I knew the Task Sequence was sound because others were using it, so it was definitely something unique to my machines but what?

Since I was doing this on 1607 machines I tried upgrading form 1511 to 1703 and 1511 to 1607 but they too failed the same way confirming it was not Task Sequence specific but again unique to my machines.  After spending a quite a few cycles on this, my original machine started failing differently: I was now seeing a ‘Retry’ button with a status of ‘Failed’.  I checked the smsts.log but it didn’t have a recent date/time stamp so it never got that far.  Hmm…

Check the TSAgent.log

Opening the TSAgent.log file I could see some 80070002 errors about not being able to delete HKLM\Software\Microsoft\SMS\Task Sequence\Active Request Handle but the real cause was a bit further up.

TSAgentLog

The lines of interest:


Getting assignments from local WMI. TSAgent 9/1/2017 12:58:27 PM 1748 (0x06D4)
pIWBEMServices->;;ExecQuery (BString(L"WQL"), BString (L"select * from XXX_Policy_Policy4"), WBEM_FLAG_FORWARD_ONLY, NULL, &amp;amp;pWBEMInstanceEnum), HRESULT=80041032 (e:\nts_sccm_release\sms\framework\osdmessaging\libsmsmessaging.cpp,3205) TSAgent 9/1/2017 1:03:55 PM 1748 (0x06D4)
Query for assigned policies failed. 80041032 TSAgent 9/1/2017 1:03:55 PM 1748 (0x06D4)oPolicyAssignments.RequestAssignmentsLocally(), HRESULT=80041032 (e:\cm1702_rtm\sms\framework\tscore\tspolicy.cpp,990) TSAgent 9/1/2017 1:03:55 PM 1748 (0x06D4)
Failed to get assignments from local WMI (Code 0x80041032) TSAgent 9/1/2017 1:03:55 PM 1748 (0x06D4)

The source of error code 80041032 is Windows Management (WMI) and translates to ‘Call cancelled’ which presumably happened while running the query select * from XXX_Policy_Policy4, where XXX is the site code.

I ran a similar query on my machine to get a feel for the number of items in there:


(gwmi -Class xxx_policy_policy4 -Namespace root\xxx\Policy\machine\RequestedConfig).Count

Which ended up failing with a Quota violation error suggesting I’ve reached the WMI memory quota.

Increase WMI MemoryPerHost & MemoryAllHosts

Fortunately, there’s a super helpful TechNet Blog post about this.  Since all of my test machines were running into this, I decided to make life easier for myself and use PowerShell to accomplish the task on a few of them thinking I’d have to raise the limit once.


$PHQC = gwmi -Class __providerhostquotaconfiguration -Namespace root
$PHQC.MemoryPerHost = 805306368
# Below is optional but mentioned in the article
#$PHQC.MemoryAllHosts = 2147483648
$PHQC.Put()
Restart-Computer

After the machine came up I ran the same query again, and after 2 minutes and 38 seconds it returned over 1800 items.  Great!  I ran it again and after 5 minutes it failed with the same quota violation error.  Boo urns.  I kept raising MemoryPerHost and MemoryAllHosts to insane levels to get the query to run back to back successfully.

The good news is that I made progress suggesting I’m definitely hitting some sort of memory ceiling that has now been raised.

The bad news is why me and not others?  Hmm…

Root Cause Analysis

I checked the deployments available to that machine and wowzers it was super long.  I won’t embarrass myself by posting an image of that but it was very long.  This helped to identify areas of improvement in the way we’re managing collections & deploying things, be it Applications, Packages, Software Updates and so on.

On my patient zero machine I ran the following to clear out the policies stored in WMI:


gwmi -namespace root\xxx\softmgmtagent -query "select * from ccm_tsexecutionrequest" | remove-wmiobject

gwmi -namespace root\xxx -query "select * from sms_maintenancetaskrequests" | remove-wmiobject

restart-service -name ccmexec

I then downloaded the policies and tried to image – it worked!  I decided to let that machine go and focus on some administrative cleanup in SCCM.  After tidying things up a bit, the rest of my 1607 machines started the 1703 upgrade Task Sequence without issue and the 1511 machines ran the 1607 upgrade Task Sequence as well.

As we continue to phase out Windows 7, we’ll hopefully update our methods to help avoid problems like this and perform that routine maintenance a little more frequently.

 

Upgrading Windows 10 1511 to 1607

In 2016 we began the process of moving from Windows 7 to Windows 10 1511 learning a ton along the way.  After 1607 went Current Branch for Business (CBB) we began planning for that upgrade phase, and what lies below is a overview of that process.

Initial Smoke Test

Once 1607 went CBB we very quickly threw an upgrade Task Sequence together to see what the upgrade process looked like and what, if anything, broke.  The upgrade process went smoothly, the vast majority of applications worked but there were a handful of things that needed to be worked out

  • Remote Server Administration Tools (RSAT) was no longer present
  • Citrix Single Sign-On was broken
  • A bunch of Universal Windows Platform (UWP) or Modern Applications we didn’t want were back
  • Default File Associations had reverted
  • The Windows default wall paper had returned
  • User Experience Virtualization (UE-V/UX-V) wasn’t working.
  • Taskbar pinnings were incorrect; Specifically Edge and the Windows Store had returned

Still, everything seemed very doable so we had high hopes for getting it out there quickly.

Approach: Servicing vs Task Sequence

Wanting to get our feet wet with Windows as as Service (WaaS), we explored leveraging Servicing Plans to get everyone on to 1607 but quickly ran into a show stopper: How were we going to fix all of the 1607 upgrade ‘issues’ if we went down this path?

We couldn’t find an appealing solution for this, so we went ahead with the Task Sequence based upgrade approach.  This gave us greater flexibility because not only could we fix all the upgrade issues but also do a little housekeeping, like install new applications, upgrade existing applications, remove retired applications and more.  This was far simpler and more elegant than setting up a bunch of deployments for the various tasks we wanted to accomplish either before the upgrade or after.

Avoiding Resume Updating/Generating Events

One concern with Servicing was ensuring the upgrade wasn’t heavy handed, forcing a machine to either upgrade mid-day because they were beyond the deadline or during the night because they left their machine on.  This was because the upgrade would bounce their machine which could potentially result in lost work, something most people find undesirable.  With Servicing, we couldn’t come up with a sure-fire way to check for and block the upgrade if, say instances of work applications were detected, such as the Office suite, Acrobat and so on.

Sure, we could increase the auto-save frequency – perhaps setting it to 1 minute – and craft a technical solution to programmatically save files in the Office Suite, safe Drafts and try to do some magic to save PDF’s and so on.  But at the end of the day, we couldn’t account for every situation: we would never know if the person wanted to create a new file vs a new version or simply overwrite the existing one.  And most importantly, we didn’t want to have to answer why a bunch of Partners lost work product as a result of the upgrade.

So, we decided to go the Task Sequence route.

Task Sequence Based Upgrade

Now that we knew which way we need to go, it was just a matter of building the fixes to remediate the upgrade issues then setup the Task Sequence.

Upgrade Remediation

  • Remote Server Administration Tools (RSAT) – Prior to performing the OS upgrade, a script is executed to detect RSAT, and if present, a Boolean variable which is referenced after the upgrade is complete to triggers re-installation of RSAT.
    .
  • Citrix Single Sign-On – This is a known issue – see CTX216312 for more details.
    .
  • Universal Windows Platform (UWP) applications – Re-run our in-house script to remove the applications.
    .
  • Default File Associations
    • Option 1: Prior to performing the OS upgrade, export HKCR and HKCU\Software\Classes then import post upgrade.
    • Option 2: Re-apply the defaults via dism from our ‘master’ file.
      .
  • Wallpaper – Re-apply in the Task Sequence by taking advantage of the img0 trick.
    .
  • UE-V/UX-V – The upgrade process broke the individual components of the UE-V Scheduled Tasks requiring a rebuild.  Once fixed on a machine we copied the good/fixed files from C:\Windows\System32\Tasks\Microsoft\UE-V and setup the Task Sequence:
    1. Enable UE-V during the upgrade via PowerShell
    2. Copied the fixed files into C:\Windows\System32\Tasks\Microsoft\UE-V
    3. Updated the command line the Scheduled Task ran
    4. Disabled the ‘Synchronize Settings at Logoff‘ Scheduled Task since that was still buggy, causing clients to hang on log off.
      .
  • Taskbar Pinnings – Prior to performing the OS upgrade, export HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Taskband then import post upgrade.
    .
  • Critical Process Detection – CustomSettings.ini calls a user exit script that loops through a series of key executables (outlook.exe, winword.exe etc.) running tasklist to see if a process is detected and if so sets a Task Sequence variable that’s later evaluated.

Since we were going the Task Sequence route, and it would be generally available in Software Center, it was decided a password prompt might help prevent accidental foot shooting.  So shortly after the Task Sequence launches an HTA driven password prompt is displayed that only IT should be able to successfully navigate.  This added yet another line of defense for anyone who ‘accidentally’ launched the Task Sequence;
Even though one has to click through two prompts to confirm the installation but whatever. 🙂