PowerShell DSC Resources

Desired State Configuration (DSC) is a configuration framework in PowerShell that enables you to manage your infrastructure with configuration as code.

DSC resources are similar to Puppet resources — they let you specify the desired state of an item on a node you managed. These resources can be small, such as xInternetExplorerHomePage, or large, such as xExchange. The PowerShell Gallery is a repository for finding and sharing DSC resources — similar to Puppet Forge.

Managing DSC resources with Puppet

Puppet allows you to manage DSC resources directly by installing them from Puppet Forge. Once you have added the DSC module to your Puppetfile and deployed it to your code base, you can declare the DSC resources. For example, if you deploy the dsc-xinternetexplorerhomepage module, you declare the resources in your Puppet code like this:
dsc_xinternetexplorerhomepage { 'homepage':
  dsc_ensure    => 'Present',
  dsc_startpage => 'https://puppet.com',

The dsc-xexchange module allows you to manage an entire MS Exchange server using resource types and parameters for configuration.

You can find all of the PowerShell DSC modules on the Forge. Install them and use them like you would any other Puppet module. You can find the parameter documentation on the References tab of each module's Forge page (or via puppet describe). If the module author did not fully document the DSC resource, the Forge might only include a list of parameters and valid data types. For more information, you can click the Project URL link at the top of the module page to see the documentation source repository. Note that each parameter of the original DSC resource starts with dsc_ when used with Puppet.

Puppet’s support policy for PowerShell DSC modules

The PowerShell DSC modules are different from other modules on the Forge. DSC Modules are auto-generated and mostly consist of vendored code that is not owned by Puppet. While the modules are approved for use with Puppet, Puppet does not support the vendored DSC content inside the module.