When PowerShell 4.0 shipped, the major new feature was DSC or Desired State Configuration – a very convenient and declarative way to manage the configuration of your Windows servers. However as a developer whose IT department doesn’t really allow me anywhere near their servers, I’m interested in DSC from a purely Windows client SKU perspective. I stand up new test machines and VMs all the time with various Windows client SKUs. I was disappointed to find that the initial set of DSC resources for Windows clients was missing the equivalent of the WindowsFeature resource that is supported for Windows Server SKU configuration. Without this resource, you can’t use DSC to configure your machine with features such as IIS, IIS-ASPNET45, etc.
Well that all changes with the DSC Resource Kit Wave 5. This version has an updated xPSDesiredStateConfiguration resource that includes xWindowsOptionalFeature. Add to that the xOneGet resource for installing utilities like dotPeek, SysInternals, and Fiddler and now DSC is going further towards getting my test machines and VMs setup quickly for doing development work.
Here’s basically what I’m doing to configure, well at least start configure, my test machines and VMs. I’m sure over time I will continue to add to this DSC configuration to automate more of the steps I’m currently doing manually.
First step is to go and grab the DSC Resource Kit Wave 5. Second, you will need the July “experimental” version of PowerShell (WMF 5) to use these new resources. You don’t want to install this on a production machine. This would be a great excuse to spin up a Hyper-V image with Windows 8.1 on it to experiment with this. To install the July version, go to the Requirements section of the website above and click on either the x64 MSU or x86 MSU links – depending on the bit-width of your OS installation. Third, download the the resource kit ZIP file via the link at the top of the web page. After you have downloaded it, be sure to “unblock” the zip before extracting any files from it. Now fire up PowerShell “as administrator” and execute the following PowerShell commands. Note: the installation of xOneGet will prompt you to install nuget.exe. Answer “y” to this to allow nuget to be installed. The new Install-Module cmdlets require nuget.
C:\> Set-ExecutionPolicy RemoteSigned –Force C:\> Enable-PSRemoting –Force C:\> Install-Module xOneGet
Now open the DSC Resource Kit Wave 5 zip you downloaded and unblocked. Copy the directory xPSDesiredStateConfiguration to your C:\Program Files\WindowsPowerShell\Modules directory. There should be two directories in there now: xOneGet and xPSDesiredStateConfiguration.
Now open up the 5.0 PowerShell_ISE and copy this script and save it as $home\DevPCConfig.ps1. The first section installs all the Windows optional features required to do ASP.NET development on .NET 4.5. There is a section in there to modify settings of the console host for both x64 and x86 PowerShell. Remove that or tweak to your satisfaction. The last section installs some tools that I use all the time: dotPeek, Fiddler4 and PerfView. To see what packages are available run:
Now, back to preparing to apply this configuration. From the admin PowerShell console, cd to the same directory where you saved DevPCConfig.ps1 and execute the script. Note: this doesn’t actually apply the configuration. We will do that in the next step.
This will create the MOF file that drives the DSC engine. You can see the file in .\DevPCConfig\localhost.mof. Now let’s tell the DSC engine to apply this configuration to the machine by executing this command:
C:\Users\Keith> Start-DscConfiguration .\DevPCConfig –Wait –Verbose
This will generate a lot of output but is informative the first time or two. After that you can drop the –Verbose parameter.
In an ideal world, I could use the community resource cPSGet to allow me to install my two favorite PowerShell modules but alas, bugs are preventing that from happening. So as a manual step, I execute the following two commands to install these modules:
C:\> Install-Module Pscx –Scope CurrentUser C:\> Install-Module PSReadline –Scope CurrentUser
There is still plenty more I find myself tweaking on every new machine I set up. Over time I’ll be able to “declare” more of that configuration in DevPCConfig.ps1 especially as more Microsoft and community resources become available.