Road to MMS 2016


After many years of trying I’m finally going to be attending one of the major IT Pro conferences in 2016.  In May I’ll be attending the Midwest Management Summit (MMS) in Minnesota for the first time.  I was lucky enough to convince my employer to split the cost with me.

To say I’m excited would be an understatement.  Like planning for the first day of school I’ve been making lists of what to bring, what I need to get, how to get there, etc.  I’m gathering up books just in case I can convince the authors to sign them for me.  What can I say, I’m a nerd!  I’ve started plotting out my drive.  Granted a small part of me is dreading the 10+ hour drive but I’m kind of looking forward to it.  It is going to be an adventure to say the least.  I’ll learn a lot.  Meet many new people.  And maybe see some sights along the way.

Screen Shot 2015-12-21 at 12.37.11 PM.png

Now, I just need to pull together a great playlist of driving songs to get started!


How Often Do You Get to Touch a 10,000 Year Old Mammoth?

Earlier this week a farmer just outside of town was excavating in his field and uncovered the skeleton of a Wooly Mammoth. It made big news here and the story was picked up by a number of big news franchises.  Anyway, the farmer is the father-in-law of my wife’s friend and she invited us out to see it.

How could I say no?  I’ve seen skeletons of mammoths in museums and drawings of them since i was a kid.  But this was an opportunity to actually touch something that roamed the very land where my house now sits, an animal that lived and died here 10,000 years ago.  It was amazing to say the least.  What struck me was the shear size of everything.  I know mammoths were large, but the skull was probably as big as my dinning room table.  The tusks surprised me in that they were so smooth.  I don’t know why I thought they would be rough but I was surprised that they were smooth, almost polished.

Well, here are links to some of the news stories for more info and below that are some pictures.

Farmer finds woolly mammoth bones in Michigan field (Detroit News)

Woolly mammoth bones found in Michigan soy field (Chicago Tribune)

Farmer digs up woolly mammoth bones in Michigan soy field (Washington Post)

Michigan farmers discover woolly mammoth skeleton (BBC News)

Woolly Mammoth Skull

Woolly Mammoth Skull

Mammoth Front of Skull

Mammoth Front of Skull

Mammoth Shoulder Balljoint

Mammoth Shoulder Balljoint

Mammoth Tusk Tip

Mammoth Tusk Tip

Task Sequences Fail After Upgrading to MDT 2013 U1

Update – Michael Niehaus took an interest in my problem and was able to reproduce it in one specific scenario.
Here is his email explaining how he was able to reproduce the problem:

I tried it and it worked fine. But I didn’t give up like most auto mechanics do J
So I was able to reproduce the error in one specific scenario:
· Create a task sequence through the MDT wizard, specifying an admin password (saved as plaintext in the Unattend.xml).
· Edit the Unattend.xml and save it (you don’t need to change anything, just save).
· Deploy with either the admin password wizard pane enabled (SkipAdminPassword=NO) or a non-blank AdminPassword variable value (specified in CustomSettings.ini, database, etc.).

In this particular case, MDT injects the value of AdminPassword into the Unattend.xml but doesn’t reset the plaintext value. Definitely a bug.


In this case I had done exactly that.  I had set an admin password when I created the task sequence through the wizard.  I also edited the unattained.xml file.  And finally, I had an admin password specified in the [Default] section of my CustomSettings.ini.  So, I managed to find the one way to shoot myself in the foot with this.

Stumbled onto an issue yesterday after upgrading my MDT 2013 deployment share to MDT 2013 Update 1.  My existing task sequences would fail during OOBE.


Windows could not parse or process unattend answer file [C:\windows\Panther\unattent.xml] for pass [oobeSystem]. The settings specified in the answer file cannot be applied. The error was detected while processing settings for component [Microsoft-Windows-Shell-Setup].

If I created a brand new task sequence and modified nothing it would work perfectly.

So I compared my original Unattend.xml with the factory default one to look for differences in oobeSystem.  The only difference was that in my original XML the passwords for the Administrator account and the autologin account were not in plain text while the factory XML was.


My original XML is on the left while the factory default is on the right.

I used the Windows System Image Manager, triggered by editing the XML through the MDT console, to modify the “ProtectYourPC” setting and turn off auto updates.  That was the only setting I modified and never touched the passwords.  My guess is that WSIM set the passwords to be encrypted by default.

I took my original XML and using Notepad replaced the password sections and left the ProtectYourPC setting untouched.  Ran a test build with it and it completed successfully.

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

Windows 10 – Just Around the Corner

Well, release day is the day after tomorrow!


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

My Experience with a Microsoft Online Proctored Exam

This morning I sat for the Microsoft 70-689 exam (Upgrading your Skills to MCSA Windows 8).  For this exam I decided to give the new offering of taking the exam online as opposed to driving out to a testing center.

[With 2015 Microsoft changed testing partners here in the US and they began to offer the ability to sit for your exam and take it online.]

This was new to me but I thought I’d give it a try at least and see if it would be a method I would use again.

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.