Category Archives: Handy to Have

So your boss is going to want stats for your OSD sequence? [Part 1 – Data Gathering]

How to provide hard statistics on your build sequences.

A while back my boss gave me two goals for our OS deployments; 1) he set a target for 90% successful builds and 2) build times as close to 1 hour as possible.  Okay, getting there is one thing, but how do I report on that?

Read the rest of this entry

Enabling BranchCache with Configuration Manager

Last week I wrote a post about setting up Windows PE Peer Caching.  One of the limitations of that feature is that it only works within the Windows PE portion of a build task sequence.  Once in the full OS or for deployments to established clients Peer Caching is unavailable.

Phil Wilcock, co-founder of 2Pint Software, commented and pointed out that you could use Peer Caching for getting the OS deployed and then use BranchCache within the full OS.

Now, I’ll be honest here.  I understand the “textbook” when it comes to BranchCache but I had never actually set it up.  It always seemed to fall under the, “One day I’m going to have to give that a try.”  Well that day is today.  This post will get BranchCache working with Configuration Manager.  Once that is done my next step will be getting 2Pint’s BranchCache for OSD up and running.

“Unless you try to do something beyond what you have already mastered, you will never grow.”

-Ralph Waldo Emerson

Read the rest of this entry

Creating Your Own Personal Hydration Solution: Introduction

Setting up a lab can be a pretty time consuming project.  A number of people, myself included, have created various hydration kits in an attempt to make it easier.  One thing that they many have in common is that they use the Microsoft Deployment Toolkit (MDT) to generate a large build ISO to be used for building each virtual machine.

Using an MDT build ISO has both advantages and disadvantages.  It is portable.  It is simple. But it takes massive amounts of disk space and changes are very time consuming.

Read the rest of this entry

Sunday Project: Upgrade Hard Drive for Windows 10

“It’s been a long time…”

– Jimmy Page [Led Zeppelin]

It’s been too long since my last post.

Well, my wife’s laptop started getting the popup to reserve her copy of Windows 10 so I thought I’d spend a Sunday doing the upgrade.  The problem was that the hard drive in her laptop was just about full.  The laptop was a few years old and the drive (120GB) which might have been enough when it was new just wasn’t making the cut lately.

To be honest with her birthday coming up next month it’s about time to get her a new laptop.

Anyway, I needed to replace the original hard drive with a larger one so I could 1) complete the Windows 10 upgrade and 2) giver her some breathing room for a while.

The upgrade from Windows 7 to Windows 10 is pretty straight forward and well documented so I’m not going to focus on that.  Instead I’m focused on the process of cloning her hard drive to the bigger drive.

Read the rest of this entry

PowerShell – Archive all Task Sequences to XML with Index

We’ve amassed a very large number of task sequences since migrating to Configuration Manager 2012 and it got me thinking about ways to archive off older sequences so that we can clean house.  So I came up with this script.

The script will first collect all of the task sequences in your site.  Next it will enumerate through them, write the sequence to an XML named after the task sequence ID and finally create a CSV index of the TSID, task sequence name, the last modified date of the sequence and when the sequence was backed up.

Read the rest of this entry

SCCM 2012 Client Install Fails on Windows 10 Build 10061 OS Deployment

Ran into a problem deploying build 10061 using SCCM 2012 R2.  It would get as far as the standard “Setup Windows and ConfigMgr” action, reboot into the full OS and fail to continue the OSD task sequence.  My test machine would join the domain and I could log in, but it was as if it just got bored and gave up on running the rest of the task sequence.

I would open up Control Panel and there would not be a Configuration Manager applet.  The client folder (C:\Windows\CCM) didn’t exist either.

So, I checked the CCMSETUP.log file and found that the client was failing to install.CCMSETUPlogClip

Did some searching and ran across this posting by Jörgen Nilsson.  This was my exact problem.

The workaround is to skip the Windows Update Agent installation.  So in my task sequence I added an ” /skipprereq:windowsupdateagent30-x64.exe” to the Installation Properties:CM12ClientInstall

And now I’m off and running.

Updated Windows 10 ISO Creation Script

Several weeks ago Johan Arwidmark published an article about creating a Windows 10 ISO using the install.esd file generated from the upgrade process.  He also included a PowerShell script to automate the process.  His article can be found here.

I’ve used this a number of times and it works wonderfully.  Call me odd, but I have a set of 4 virtual machines that I use simply to generate the ISOs and installation source files.  I have a pair of Windows 10 Professional (32bit and 64bit) and a pair of Windows 10 Enterprise (32bit and 64bit) VMs.  I use the Professional SKU in my lab and the Enterprise SKU for testing at work.

I modified Johan’s original script to automate some “branding” of the process.  For example, the ISO generated includes the build number, SKU and architecture.  When a new build is released to the Fast Ring my VMs update and then I just run this script.  The script determines what build, SKU and architecture the VM is running and generates a unique name for the ISO as well as the parent folder that also contains the contents of the ISO.

Read the rest of this entry

Running Data DeDuplication on Hyper-V Hosts with PowerShell

First off, I want to thank Johan Arwidmark for the core code used in my script.  His blog posting can be found here.

Disk space is tight on my development VM host, very tight.  You cannot get too many VMs running on just 256GB.  So, I decided I’d make the switch to running Hyper-V on Server 2012 R2 and take advantage of Data DeDuplication.  Johan speaks highly of it, so I thought I would give it a try.

On my 2 hosts I have 8 VMs running on each and after DeDuplication I have plenty of disk space for more.

They say a picture is worth a thousand words….


I have 8 virtual machines in this folder.  With DeDupe I am able to store 270GB of VMs in less than 6GB of space.

I put together this script to process the drive.  It automatically shuts down any running VMs, processes the DeDuplication and then starts the VMs that it shut down back up.

# Shut down all running VMs and then process deduplication
$AllVMs = Get-VM | Where {$_.State -eq 'Running'}

FOREACH ($VM in $AllVMs)
 Write-Host Shutting down $VM.Name
 Stop-VM -Name $VM.Name

# Execute the Dedupe jobs
Start-DedupJob -Type Optimization -Memory 75 -Priority High -Volume D: -Wait
Start-DedupJob -Type GarbageCollection -Full -Memory 75 -Priority High -Volume D: -Wait
Start-DedupJob -Type Scrubbing -Full -Memory 75 -Priority High -Volume D: -Wait

# Restart the VMs that had been running
FOREACH ($VM in $AllVMs)
 Write-Host Starting up $VM.Name
 Start-VM -Name $VM.Name

When disk space starts to get a little cramped I run this script. I give it some time to run and when it is finished I have the space I need.

Handy to Have – PowerShell Script to Add Collection Variables

We leverage Collection Variables a lot in SCCM 2012 for our OS deployments.  Using them to store things like the domain join account’s or the “run as” account’s passwords makes it simple to maintain and saves us the trouble of having to slog through the entire task sequence and possibly missing one when the time comes to change the passwords.

But this creates its own hassles.  Namely making sure that the variables are not only set but set correctly on any collections when setting up an OS deployment.  What’s the saying?  If you need to do something twice then automate it?

So I did…

Read the rest of this entry