Trying to leverage goodness from various mixtures of Chocolatey with SCCM is definitely not new. Others have been playing around with it for quite some time. However, I wanted to pause from a month of mind-numbing work-related things to jot down some thoughts, realizations, pontifications, gyrations and abbreviations on this.
Much of this idiotic rambling that ensues hereinafter is based on the free version of Chocolatey. There is also a “Business” version that offers many automation niceties which you might prefer. There’s a lot more to this Chocolatey thing than I can possibly blabber out in one blog post (even for yappy little old me), such as the Agent Service features, packaging, and so more. Visit http://chocolatey.org for more.
1 – Is it “Better”?
No. It’s just different. But, regardless of whether if “fits” a particular need or environment, it’s often nice to know there’s another option available “just in case”.
2 – Who might this be of use to?
I can’t list every possible scenario, but I would say that if the potential benefits are lined up it kind of points to remote users without the use of a public-facing (or VPN-exposed) distribution point resource. It also somewhat negates the need for any distribution resource, even cloud based (Azure, AWS), since there’s no need for staging content unless you want to do so.
3 – How does SCCM fit?
At this point (build 1703) it’s best suited for use as a Package object, since there’s no real need for a detection method, or making install/uninstall deployment types. A Program for installation, and another for uninstallation, are pretty much all that’s needed.
4 – How does an Install or Uninstall work via SCCM?
As an example, to install Git, you would make a Package, with no source content, and then create one Program as (for example only) “Install Git” using command “choco install git -y”, and another as “Uninstall Git” using “choco uninstall git -y”. (Caveat: some packages incur dependencies, which may throw a prompt during an uninstall. For those you can add -x before the -y, but refer to the Chocolately documentation for more details)
5 – How do you push updates to Chocolatey apps via SCCM?
You can use the above construct with a third Program named “Update Git” (for example) with command “choco upgrade git -y”. Another option (and my preference) is to deploy a scheduled task that runs as the local System account, to run “choco upgrade all -y” at a preferred time or event (startup, login, etc.). And, as you might have guessed by now (if you haven’t fallen asleep and face-planted into your cold pizza), someone has done this for you.
6 – Can you “bundle” apps with Chocolatey with or without SCCM?
Absolutely. There’s a bazillion examples on the Internet, but here’s one I cobbled together for a quick lab demo a while back. This one feeds a list of package names from a text file. You can also hard-code the list, or pull it from anywhere that PowerShell can reach it (and not just PowerShell, but any script that you can run on the intended Windows device).
7 – What about MDT?
Here’s a twist, you can deploy Chocolatey packages using MDT, or deploy MDT using Chocolatey. How freaking cool is that? If you sniff enough glue, you might even construct a Rube Goldberg system that deploys itself and opens a wormhole to another dimension. By the time you find your way back, America will be a subsidiary of McDonald’s and we have real hoverboards.
8 – What about applying this to Windows Server builds?
You can. I’d also recommend taking a look at BoxStarter, and Terraform. I built a few BoxStarter scripts using Github Gists for demos a while back. Here’s one example for building and SCCM primary site server, but it’s in need of dusting off and a tune up. You can chop this up and do things all kinds of different (and probably better) ways than this.
The list of automation tools for building and configuring Windows computers is growing by the day. By the time you read this sentence, there’s probably a few more. Hold on, there’s another one.
PS – If you get really, really, reeeeeeally bored, and need something to either laugh at, ridicule or mock, you can poke around the rest of my Github mess. I don’t care as long as you put the seat back down after flushing.