Building a Desired State Configuration Pull Server

Quick recap, I’m working through a series of posts about the Desired State Configuration infrastructure that I’m building at Stack Exchange, including some how-to’s.

The High Points

I started with an overview of what and why.  Today, I’m going to start the how.

Building a Pull Server

I’m going to describe how to do this with Server 2012 R2 RTM (NOTE: this is not the General Availability  release, so there may be changes at GA), since that’s the environment I’m working most in.  If there is enough demand, I may follow up with how to do this using the Windows Management Framework on downlevel operating systems after the GA version of WMF 4 is released.

The first step is adding the required roles and features, including the DSC Service.

Fortunately, the Dsc-Service feature has the right dependencies configured so IIS, the correct modules, and the Management OData Extension are all enabled.

Next we need to set up the IIS web site:

  • Create an directory to serve the web application from (I’ll use c:\inetpub\wwwroot\PSDSCPullServer)
  • Copy several files from $pshome/modules/psdesiredstateconfiguration/pullserver (Global.asax, PSDSCPullServer.mof, PSDSCPullServer.svc, PSDSCPullServer.xml) to this directory.
  • Copy PSDSCPullServer.config and rename it to web.config
  • Create a subdirectory named “bin”.
  • Copy one file from $pshome/modules/psdesiredstateconfiguration/pullserver (Microsoft.Powershell.DesiredStateConfiguration.Service.dll) to the “bin” directory.
  • In IIS, create an application pool that runs under the “Local System” account.
  • In, IIS, create a new site (or application in an existing site or just use the existing default site)
  • Point the site or application root to the directory you designated as the root of the site.
  • Unlock the sections of the web config as below


Now we need to set up the location where the pull server content will be served from.  Installing the DSC Service feature creates a default location ( $env:programfiles\WindowsPowerShell\DscService ).  There’ll you find sub-directories for configuration and modules.  We can use these folders or we can create another location.  I’m going to stick with the defaults for now.  We’ve got a few steps left.

First, we need to copy the Devices.mdb from $pshome/modules/psdesiredstateconfiguration/pullserver to the root of our pull server data location (in this case, $env:programfiles\WindowsPowerShell\DscService )

Update the web.config app settings with the following settings:

After that your pull server should be up and running.  You should see something like this if you navigate to http://yourpullserver/psdscpullserver.svc




About Steven Murawski

Steven is a Cloud Ops Advocate at Microsoft. Steven is an active member of the Chef and WinOps communities and a maintainer for several open source projects, including Chef, Habitat, and Test-Kitchen.

11 thoughts on “Building a Desired State Configuration Pull Server

  1. Pingback: Building a Desired State Configuration Infrastructure |

  2. Pingback: Building a Desired State Configuration Configuration |

  3. Brett Slaski

    I noticed that though Add-WindowsFeature Dsc-Service will add IIS to the server, management tools are not added and I needed to add them separately so I may add website, etc. for the pull server.

  4. Pingback: DevAdmin » Blog Archive » PowerShell 4: Desired State Configuration

  5. Pingback: PowerShell 4: Desired State Configuration | DevAdmin Blog

  6. Pingback: End of Month Research Roundup – January 2014 | endjin blog

  7. Pingback: How to install a DSC Pull Server on Windows 2008 R2 | Dave Wyatt's Blog

  8. Pingback: Episode 275 – PowerScripting Podcast – PowerShell MVP Steve Murawski |

  9. Pingback: [PowerShell] Getting started with Windows PowerShell Desired State Configuration – Part 2 – Pull Server | Daniel's Cloud Endeavour

  10. Hugh Caldwell

    Could you provide an example of using the PULL server with REST Clients? Everything I’ve found shows configuring the clients to use SMB and guids which seem to overly complicate the matter.

Comments are closed.