Invoke CM_Build over the Web

Updated 10/15/2017 – Added -Override example


First off: WTF is CM_BUILD?

CM_BUILD is a PowerShell script that configures a “vanilla” Windows Server machine into having Configuration Manager Current Branch installed.  This includes ADK, MDT, Server Roles and Features (WSUS, BITS, etc.), SQL Server, ConfigMgr itself, and a few goodies like Right-Click Tools, ConfigMgr Toolkit.  The GitHub repo has a cute readme markdown page filled with overcaffeinated gibberish on how to use it.  CM_SiteConfig is the “part 2” to cm_build, which configures ConfigMgr into a semi-functional site.

Short answer:

Okay, why CM_BUILD?

I don’t know.  Why do we do anything?  For the thrills? I could have taken up robbing banks, raising a crocodile farm, or breaking world records of swilling down cans of Four Loco while working on electrical equipment.  But I chose the boring life.  And while I’m bored, I hate clicking buttons repeatedly, so …

I got inspired by Johan and Mikael’s ConfigMgr Hydration Kits and Deployment Fundamentals Vol. 6 book examples, and Niall’s noob scripts, (I know it’s not actually called that, but it sounds cool to say “Niall’s noob scripts“), and after 45 cups of terrible coffee I said “I can shove all that into an XML file and call my JSON friends up and laugh hysterically at them, saying things like ‘You and your snotty little JSON drivel!  Always mocking poor, starving little XML.  Well, I’ll have you know I can still write XML, and probably even a little COBOL! So what do you think of that?!  Hello?  Hello?  Did you just hang up on me?!! WTF!

Anyhow…. Hold on, I need to get my dog outside before she has an accident….

okay, I’m back.

Why Invoke it over the Web?

There are several potential reasons for wanting to do this:

  • I was really bored and it’s been raining all freakin day, and…
  • It’s 3am and I can’t sleep, and…
  • I saw this, and …
  • I wanted to pull this off within Azure, using a VM extension, without having to import any actual files, and it would be cool to tie all this together with a runbook so I can send a text message “new lab configmgr p01“, to fire off a lab build in Azure and have it text me back “your stupid lab is ready, now leave me alone!” then I can forget it’s still running and it runs all my MSDN credits down to $0 until the next monthly cycle, and…
  • I scrolled through Dan Bilzerian’s twitter feed just long enough to hate my boring life, and needed a distraction, and…
  • It seemed like something cool to try


Time to put on a poker face and act serious now.  The example below calls the cm_build.ps1 script from the GitHub master branch URL, converts it into a -ScriptBlock object, and passes in the -XmlFile parameter value using the Github Gist raw URL (you can make your own by copying the cm_build.xml into your own “secret” Gist, so you don’t openly share sensitive information to the whole world)

$ps1file = ''
$xmlfile = '<your-gist-raw-url>'

$script = Invoke-WebRequest $ps1file
$scriptBlock = [ScriptBlock]::Create($script.Content)
Invoke-Command -ScriptBlock $scriptBlock -ArgumentList @($xmlfile, $True, $True, $True)

But you can also invoke the interactive gridview menu using the -Override parameter, by simply appending one more $True into the -ArgumentList array.

Invoke-Command -ScriptBlock $scriptBlock -ArgumentList @($xmlfile, $True, $True, $True)

Then you get this budget-sized, corner-cutting, hack of a menu to choose from…override-gui

You may see a red warning about “Split-Path : Cannot bind argument to parameter ‘Path’ because it is null.”  I’ll fix that soon.  It only impacts the log output, but nobody reads log files anyway, right?

Anyhow, it’s 3:33 am, and I’m still typing, which is probably bad for my health, but if two people read this and it actually provide useful information one of you, mission accomplished.  Actually, I know for a fact this is bad for my health.  Regardless, I ran the above snippet (with a real URL in the $xmlfile assignment) in my Hyper-V duct-tape and chewing gum lab at home, and it worked like a charm.  Now I can log into the server, open the ConfigMgr console and proceed with CM_SiteConfig, or apply real world tactics and break the ConfigMgr site entirely and start over.



Short (But True) Stories – Beer Cup

I was cleaning up old hard drives and found a “diary” of sorts and it reminded me of a bunch of stories I’ve shared with people around me, but never online. Anyhow, this hasn’t been a good week for me, and I need something to get my mind off of stupid crap and bad news, so here’s a bit of therapy. I hope you enjoy!

In 1984, I had been playing drums in a local rock band in Hampton, Virginia.  I had a day job, but the music gig was fun and I was earning enough for gas, food, and drum sticks, while my day job paid for the other important things. Our band was asked to play at a squadron picnic at the local Air Force base. Two of the band members, the singer and bassist, were active-duty at the base, so they brought a bigger crowd than we usually had.  There was plenty of food, beer and families with kids, the weather was fantastic and it was a lot of fun.

After our second of three sets, we took a break and were standing around talking and kidding around. Then one friend of ours, playfully bumped the bass player, and knowing it was in fun, set his Dixie cup of beer down and went after the other guy to wrestle. After a few minutes of tussling around, they got back up, laughing, and our bassist went back to his beer and we continued kidding around.

A few minutes later, he started turning blue in the face and couldn’t talk. We thought he was pranking us, as he often did. Then he slowly went down on the ground, rolled over on his back, and started making gurgling sounds. One of the guys bumped his arm with his foot, saying something like “come on, man, that’s not funny.” But he looked even worse.

Suddenly one of the guys rolled him over and patted him on his back really hard, thinking he may have choked on something. After a few hard slaps on his back, he coughed up a large bumble bee. It had landed in his beer cup while he was play-wrestling, and he swallowed it, where it apparently stung the back of his throat.

Being that we were in the middle of a military base, we were lucky to get EMT help fast, and after a few hours in the emergency room, he was allowed to go home.

Good times.

My Favorite Ignite 2017 Sessions

Just a heads-up: Not all of the sessions I attended or enjoyed most are posted yet.  And some sessions might not have been recorded (expo area mostly).  Also, some of the videos have flaky audio.  Enjoy!


[ PLACEHOLDER FOR BRANCH CACHE SESSION (when it becomes available) ]


I Finally Got a Nap after MS Ignite 2017

Microsoft Ignite 2017.  Orlando Florida.  September 2017

It’s been a week indeed.  This post might be humorous, and it might not be.  My brain is still re-assembling after a busy week and finally getting some much-needed sleep.  This is a rambling post, so I won’t blame you for skipping it (TL/DR), but if you’re ready, here goes…







The Travel

I flew into Orlando on Sunday.  As I left, my cat gave me the finger and my dog took a dump on the floor near my suitcase, which is how she lets me know she’ll miss me.  All good.  My air travel frequency had died down since July, but I was happily surprised that it was one of the first flights in a while without a single screw-up.  In fact, we arrived ten minutes ahead of schedule.  I stayed at the Renaissance Hotel, which was very very nice, and the staff couldn’t have been more nice.  The flight back home was uneventful as well, and I arrived at midnight to a tiny little airport with my wife waiting in the car outside.

The Techy Stuff

There was a lot to absorb this year at Ignite.  There were plenty of announcements, rumors, corrected rumors, re-corrected rumors, rumors about corrected rumors, and some incredible events that played out, which I had no idea would happen.

There was plenty of discussion about Configuration Manager, the new Intune/EMS capabilities, and co-management of devices.  There were also quite a few sessions and discussions around Windows AutoPilotWindows AutoPilot, and Automatic Redeployment, as well as Tenant-Locking.  There was plenty going on about Azure Cloud Shell (PowerShell), SQL Server 2017 for Linux, updates to Azure Automation, updates to Intune and EMS, Office 365, SharePoint, a new infrastructure platform for Skype for Business, and the big news about Teams moving into a central role.

OVERALL: The sessions I attended were all very well done.  Even with the occasional glitches, everyone recovered quickly and kept moving without a hiccup.  The audiences seemed to be on board with the topics, content and demos as well.

Some interactions that stuck in my mind:

  • Leaving the first AutoPilot session to speak with the Lenovo folks at their expo booth, and the “device management guru” said “No. We’re not committed to AutoPilot, but we are evaluating the benefits and potential.” Then the next day, after session 2 I stopped back for a follow-up and he said “Oh, yeah, we’re in.”  Must have got a delayed memo.
  • One training services vendor rep at the expo kept repeating “we’re not the Toyota of training, we’re the gold-plated Lexus of training.” I immediately went into blank stare mode.
  • I had a great conversation with the SQL Server 2017 folks about the possibility of someday, somewhere, somehow, that we might see support for automating Maintenance Plans via PowerShell.  Not yet, it seems.  But there are ways around it with duct tape and chewing gum.
  • Nice discussion with the Fujitsu folks about their liquid-cooled (immersed) server rack.  The best part was the incredible language barrier.  Note to this vendor, smart as they may be, try to add some staff that speak the native language of the conference location, wherever that may be.  Example:
    • Me: “Have you calculated the return rate to break-even point between air-cooled and liquid cooled?
    • Them: “Yes, it is liquid.”
    • Me: “How much power does the coolant pump draw compared with fans?
    • Them: “Yes, it is liquid.
    • Takeaway:  Cleaner components due to no air-flow dust accumulation, and lower power consumption per time-unit compared with air-cooling fans.  The rack itself is smaller due to not having air-flow channels or fans.  The trade-offs include increased purchase cost and weight, as well as added space for the pump unit.
  • A rambling Twitter thread with David James about where the line between “big” and “small” customer device-management environments might exist, and the ramifications of how best to manage devices in each realm.  More on that another time/post.
  • The “deep dive” sessions on Windows Server 2016 network services changes, BranchCache/PeerCaching by Andreas Hammarskjold, and Windows Deployment and Servicing by Ami Casto, Johan ArwidmarkMikael Nystrom, and Michael Niehaus, were all indeed “deep”, and well-worth pushing the brain as hard as possible to keep up, let alone absorb the information fire hose.  If you watch nothing else from Ignite, at least check these sessions out.
  • I didn’t make it to any Mark Russinovich sessions, but I did catch a few by Don Jones and  Jeffrey Snover.
  • I missed a few sessions I really wanted to attend, due to conflicts with other sessions, nagging work-related phone calls, emails, and Teams chatting, etc.  Such as two PowerShell sessions by Stephen Owen.  But I was fortunate and honored to meet him in person as well as his wonderful wife, before the week was over.  So I can’t complain.
  • Other sessions I attended in Windows Servicing, Azure, Office 365 (Microsoft 365 now), SharePoint, Teams, PowerBI, Containers, and PowerShell were all very good.  I can’t wait for everything to get posted for viewing online.

The Semi-Techy Stuff

My daytime brain power was really really off this year.  After weeks of finally getting settled into a consistent exercise and sleep routine, even with work travel, I suffered a setback that week.  I was not an interesting person to converse with during the day.  At night I felt fairly normal, or abnormally normal.  Or normally abnormal.  Eh.

Until the closing Friday, I averaged maybe 3 hours of sleep each night.  The conference center was kept at a nice and cozy 48 degrees F.  And the combination of insufficient sleep, forgetting to pack long pants and long-sleeve shirts, an unbalanced diet, inconsistent caffeine and hydration intake, and random work-related emails, along with frequent offensive messages from insane coworkers and former coworkers, left me in a zombie state.  At least I didn’t do this.

Quite a few people approached me, all very friendly, and I tried my best to be friendly and talkative, but my brain kept saying inside, “Hey dumb-ass, you know how you didn’t go to bed until 3am and then got up at 6am?  Yeah, I’m not doing that shit anymore.  Let’s find a nice hard surface to make you do a face-plant.”


I watched the new Jerry Seinfeld show on Netflix.  At one point he commented on being able to speak to a group, but not an individual.  That’s exactly how I felt that week.  It was very surreal.

Some years ago, I used to do a fair amount of public-ish speaking. I say public-ish because it was mostly to captive audiences (corporatey stuff). I did speak at one CAD vendor mini-conference back in 1998, to a room of about 500, and it was a blast. If I have an agenda, I can ramble to a crowd, but ad lib not so much.  Anyhow, I got a case of decent wine, and a Chinese-made Swiss army knife as a token of appreciation.  Not sure what happened to the knife.

I have found, through quasi semi pseudo scientific research, that it’s not so much how MUCH sleep I get, but WHEN I get that sleep.  Even a shifting of sleep-wake periods by a half-hour can throw my entire pea-sized brain into a woodchipper.  My normal sleep cycle is 2 A.M. to 9 A.M. (my company and most of my customers are in the Pacific time zone, but I live in Eastern time zone, so it makes my neighbors really curious).  During the conference my sleep cycle shifted to 3 A.M. to 7:30 A.M., and yes, my math also suffered.


After each day I would try to get a power nap in.  Usually, I’m great at power naps. My dad taught me the trick and it’s always worked.  However, it only works when people don’t call your phone just when you get your heart rate down.

The Personal Stuff

Some of the other interesting moments…

  • Getting to meet amazing people like Stephen Owen, Ami Casto, Johan Arwidmark, Mikael Nystrom, Andreas Hammarskjold, Maurice Daly, and Jordan Benzing
  • A conversation with a valet at the hotel.  Just a cool exchange of funny stuff and both of us went our separate ways in a great mood.
  • A two hour late-night conversation with George, a colleague who shares many of the same life experiences as I:  marriage, dysfunctional families, cancer, brain tumors, the effects of sleep and diet, religion, politics, work stuff, and so on.  I live in an exceptionally red area of a red state, so the opportunities to have a rather unbiased discussion are few.  Anyhow, it was fantastic.

The Random Stuff

  • Compared with Ignite 2016, I had nothing as unusual or random during the after-hours time this year.
  • I was also reminded of something a homeless guy said to me at a conference in Vegas, back in my Autodesk days:  He patted my arm when I was standing on a corner during a lunch break, and when I turned he said “you might be a nobody going nowhere, but it’s getting there that matters.  Don’t forget to pay attention to getting there.”  Then he tried to sell me a plastic water bottle for a dollar.  But it was the thought that counts.

Final Thoughts

  • I was very much caught off-guard by people wanting to meet me at the conference this year.  I wasn’t expecting that at all, which some found to be surprising.  While I appreciate the attention, I wasn’t ready for it either.  So, I hope that if you did run into me that you allow me to do better next time.  If there is a next time.
  • I heard quite often that people think I’m some sort of “weirdness-magnet”; that I somehow attract unusual events, but I don’t think that’s true.  I suspect that I just notice small things more often than most others do.  Human and social idiosyncrasies.  For example, standing in a grocery store checkout line, waiting in a doctor’s office, or riding a bus.  I typically stop to talk with people who are normally ignored in our society: The people who give directions at the conferences, store clerks, bus drivers, hotel staff, airline staff, TSA agents (well, sometimes), police officers, homeless people, random people, Uber and Lyft drivers; anyone who can’t run fast enough to escape my death ray of chatty-ness.  The stuff that most people don’t see while staring at their phones.  Basically: I’m really not that special.

And now I have to re-bond with my dog.  She’s mad at me again.

Cm_SiteConfig 1.3 – Importing Queries and Collections

Updated:  Added missing graphic of menu

This may be the only blog post I do before I head down to Microsoft Ignite this coming weekend. I’m also trying desperately to keep up with younger colleagues on exam studying, damn it. Getting old sucks. Anyhow. I wanted to discuss some things about cm_siteconfig 1.3 that I may have glossed over (or snored through). I need a break from labs right now anyway.

What is Cm_SiteConfig?

I’ve been working on a pair of PowerShell scripts to automate the building of a System Center Configuration Manager site server.  This could be a CAS or a Primary, but basically, each of the two (2) scripts uses a dedicated XML configuration file to control what it does.  Cm_Build.ps1 installs all of the prerequisite items to make a vanilla Windows Server machine into a Configuration Manager site server.  It does not configure the Configuration Manager site itself however.  So, things like Discovery Methods, Boundary Groups, Client Settings, Site Settings, Collections, Queries, OSD items, Applications, etc. need to be created.  This is where Cm_SiteConfig comes in.

Cm_SiteConfig.ps1 uses Cm_SiteConfig.xml to configure an existing Configuration Manager site server with things like Discovery Methods, Active Directory Forest Connection and Publishing, Boundary Groups, Site System Roles (multiple), Client Settings, Client Push settings, Distribution Point Groups, Operating System Images, Operating System Upgrade Installers, Collections, Queries, Applications, Maintenance Tasks, System Accounts, Enpoint Protection Policies and even Console Folders in which to organize these things.

The Override Feature

Normally, when each script is run, it processes the XML configuration data in sequential order by reading the “use” property of each item (if use=”1″ it’s processed, otherwise it’s ignored).  When using the -Override parameter, you are presented with a graphical menu, from which you can choose individual tasks to execute, while skipping over the others entirely.

For example, if you wanted to just import custom queries and collections, you can do the following:

  1. Edit the cm_siteconfig.xml file to suit your site configuration (within the [cmsite] tag: sitecode, forest, etc.)
  2. Edit the queries and collections entries (if needed)
  3. Open a PowerShell console on the Site Server using “Run as Administrator”
  4. Run the cm_siteconfig.ps1 script as follows (see example below also):
    cm_siteconfig.ps1 -XmlFile cm_siteconfig.xml -Detailed -Override
  5. Select the features you wish to process from the Gridview menu, and click OK (lower right of menu)
  6. Watch the output and refresh your console

You can do the same with other sections of the XML file.

Important Note!

Be sure to run the Folders section at least once, to insure the folders are created prior to other sections being processed which may rely on those folders to be present.

Where to Get it – Here

Feedback / Suggestions / Bug Reports – Here (please!!)

Back to studying.  I hope to run into some of you during Ignite!  I’m easy to spot:  I look like every other white guy roaming the expo floor with too much swag falling out of every pocket and trying to hold a drink and a cellphone at the same time.

Interview: Favorite Quotes

Question: “What is one of your favorite quotes?



Amy Casto @AdaptivaAmi

I get up every morning determined to both change the world and have one hell of a good time. Sometimes this makes planning my day difficult.

Johan Arwidmark @jarwidmark

Failure is not an option

Mike Terrill @miketerrill

Moving on, is a simple thing, what it leaves behind is hard.” – Dave Mustaine

Arnie Tomasovsky @arnietomasovsky

I have no particular one, but I quite like this one: “Money can buy you a fine dog, but only love can make him wag his tail.

Julie Andreacola @jandreacola

If you want to go fast, go alone. If you want to go far, go together

Rod Trent  @rodtrent

The mind, once expanded to the dimensions of bigger ideas, never returns to its original size.” – Oliver Wendell Holmes

Nickolaj Andersen @nickolajA

I have some time, but I’m not really a quotes guy. The only one I can think of is when it was said that “64k of RAM is enough” (or something like that) 🙂

Jon Szewczak @VBJV

IT: “Everyonee writes terrible code. We can’t help it. The goal each year is to suck a little less.

Life: “Affirmation can change the course of someone’s life.

Nicke Kallen @znackattack

Well, odd one that sticked with me for years. About 17-18 years ago we had some workplace training (perhaps a bad translation..) (still in high school then) and the mentor that was assigned to me just gave me some pretty straight forward rules – including this: “You can wait for me, but I can’t wait for you

Obviously- this was that he wouldn’t wait 5 minutes for me, but i should value his time and if getting somewhere on time meant i had to stick around for 2 hours just waiting that was OK. Great mentor that really gave the lessons that i needed to hear at the time. Met him around the industry a few times – still share a laugh every time I meet him. Realize that as I wrote this that the quote was more valuable in the context than a general quote.

Rob Stack @londonnoise

Well, I’ve always loved “Insecure people try to make you feel smaller. Confident people like to see you walk taller.” – I’ve never known who that’s from.

The other is mildly more humorous and is “Do unto others as they would do unto you …. then run like hell before the police arrive.” 😦

Me @skatterbrainzz

Everyone has a plan, until they get punched in the mouth.” – Mike Tyson

You can’t reason anyone out of something they didn’t reason themselves into.” – The Great Henry Lapo

Interview – 5 Places You Could Get Lost Within and Not Mind at All

This time the question was: “Name (up to) 5 places you could easily get lost within for hours, and not mind at all.

Amy Casto @AdaptivaAmi

  1. Anywhere there are horses
  2. BÃ¥stad Sweden
  3. Antelope Island near Salt Lake City, UT
  4. Iceland
  5. Gulf of Mexico

Niall Brady @ncbrady

  1. Kitwe, Zambia. Because I grew up there as a child.
  2. Victoria Falls, Zambia. Because it is the most amazing place you will ever visit or see.
  3. Kariba dam and Kariba dam lake. Amazing place to be.
  4. Diarmuid and Grainne cave in Sligo, Ireland. Wow, what a view, both outside and inside (pot-holing).
  5. Ben-Bulben Sligo. A mountain with many different faces.

Julie Andreacola @jandreacola

  1. Any big research library
  2. a County Fair
  3. Reddit
  4. Forest Service roads in the mountains in my Jeep
  5. New York City. Hmm, that’s a pretty eclectic mix.

Jon Szewczack @VBJV

  1. Any hiking trail.
  2. A beach
  3. When I was younger: a Suncoast Video store.
  4. Detroit auto show – I have never been there but I can imagine that it would be just a sublimely blissful way to spend a day.
  5. In water boat show in Miami. The sheer extravagance on display is mind-numbingly weird in a very pleasant way.

Maurice Daly @modal_it

  1. Microsoft HQ
  2. Porsche Factory
  3. Lamborghini Factory
  4. Willy Wonka’s Chocolate Factory
  5. Corona Bottling Plant

Nicke Kallen @znackattack

  1. Diving any place with good visibility. Being under water and breathing while there is exhilarating.
  2. A good book. Kicking off a journey to an imaginary place or time is a way to checkout from reality.
  3. A rabbits hole. Like wikipedia, or that issue that spawns new findings all the time.

Me @skatterbrainzz

  1. Fry’s
  2. Twitter
  3. Nature and Hiking Trails
  4. New York City
  5. Abandoned structures