As automation becomes more of necessity rather than a nicety, it's important we IT folk look at better ways to perform menial tasks; one of those tasks is installing software. Rather than download an MSI, double-click on it and run through the wizard, it would behoove you to think of a better way. In this blog post, learn how to create a Chocolatey package (a popular Windows packaging manager).

Nearly all software has command-line switches to install silently, and if you perform enough research, you might figure out the right switches. Your install might then look like this:

install.exe /q /n /e /noreboot

Are you going to remember all of those switches? Probably not. You could put these switches in a batch file and then forget where you put that script or you could do this:

Install-Package -Name AcmeSoftware

Now that's something that can be remembered easily.

But how would you get to that point? The answer is a NuGet repository and a NuGet package. NuGet is a traditional software packing technology that allows you to essentially wrap up a piece of software which can then be stored in a repository, downloaded and installed at will. Chocolatey is a favorite open source tool that uses NuGet to allow IT administrators to download and silently install software.

In this article, I'm going to assume you've already got a NuGet repository setup or you know where you're going to send your package.

Let's take a piece of software and wrap it up in a NuGet package for use in one of these repositories.

Installing Chocolatey

Since Chocolatey is not installed by default on a Windows operating system, it must be downloaded and installed. It can be downloaded and installed by running this in a PowerShell console:

iex ((New-Object System.Net.WebClient).DownloadString(''))

Creating an NUSPEC file

Every NuGet/Chocolatey package must contain an NUSPEC file. An NUSPEC file is an XML package manifest that describes the package contents. This NUSPEC file must be in a particular format. Here's a sample NUSPEC file using only the required elements:

<?xml version="1.0" encoding="utf-8"?>
    <package xmlns="">
        <description>Some software I'm packaging up.</description>
        <authors>Adam Bertram</authors>

For the complete rundown of all the tags that can be used refer to the NUSPEC reference.

Creating the Chocolatey Package

Next, create the package. To do this, we use the Install-ChocolateyInstallPackage command. Let's pretend that the software we're packaging up is an EXE and the switches to install it silently are /s. We must send the file location along with the silent switches to use to the command.

Install-ChocolateyInstallPackage -PackageName 'AcmeSoftware' -FileType 'exe' -File 'C:\install.exe' -SilentArgs '/s'

This command will create the package. Next, we'll need to pack the package using the choco exe.

choco pack

Once the software has been packaged up, it's now in a format to where you can publish to a Chocolatey repository of your choice.


This process can be repeated for each piece of software you need to deploy via Chocolatey. As you can see, there are only a few additional steps that must take place to get the software "Chocolatey-ready." By doing so now allows you to get back to doing tasks that matter rather than figuring out how to deploy software to a bunch of machines at once!

If you'd like a deep dive into creating Chocolatey packages, be sure to check out the Chocolatey docs.

Join the Jar Tippers on Patreon

It takes a lot of time to write detailed blog posts like this one. In a single-income family, this blog is one way I depend on to keep the lights on. I'd be eternally grateful if you could become a Patreon patron today!

Become a Patron!