| title | Desired State Configuration changelog |
|---|---|
| description | A log of the changes for releases of DSC. |
| ms.topic | whats-new |
| ms.date | 03/25/2025 |
All notable changes to DSC after the 3.0.0 release are documented in this file. The format is
based on Keep a Changelog, and DSC adheres to Semantic Versioning.
To see the changes for the earlier development of DSC before version 3.0.0, see the
DSC prerelease changelog on GitHub.
This section includes a summary of user-facing changes since the last release. For the full list of changes since the last release, see the diff on GitHub.
v3.1.0 - 2025-06-18
This section includes a summary of changes for the 3.1.0 release. For the full list of changes
in this release, see the diff on GitHub.
-
Added support for defining adapted resource instances in configuration documents without explicitly nesting them inside an instance of the adapter resource. This simplifies the authoring for configuration documents, but comes with a potential performance tradeoff, as DSC has to invoke the adapter for each adapted instance separately.
-
Added new configuration functions:
-
Use the
equals()function to compare two values, returningtrueif the values are equal and otherwisefalse. The comparison is alwaysfalseif the two values are of a different type. When comparing strings, the comparison is case-sensitive.For example,
equals('a', 'A')would evaluate tofalse. -
Use the
if()function to conditionally return one of two values. The first argument to the function defines the condition and must evaluate to a boolean value. If the conditional argument evaluates totrue, the function returns the second argument. If the conditional argument evaluates tofalse, the function returns the third argument.For example,
if(equals('a', 'b'), 'left', 'right')would evaluate toright. -
Use the experimental
format()function to create a string that interpolates one or more values. When you use this experimental function, DSC currently emits a warning. This function only supports a subset of the data types supported in the ARM template syntax.For example,
format('hello {0} - {1:X}', 'world', 12)would evaluate tohello world - c.
-
-
Added support for extensions to DSC. You can now use the
dsc extension listcommand to enumerate available extensions. DSC now supports a single extension capability,discover, which returns JSON objects indicating where to find DSC resource manifests that aren't in thePATHorDSC_RESOURCE_PATH, as with resources installed as Appx packages.Now when DSC performs discovery, it recursively discovers extensions and resources on the system.
This release also includes an experimental extension for discovering resources installed as Appx packages.
-
Adds support for passing parameters to the
dsc configcommands from stdin. You can pass either the configuration document or parameters file contents to the command from stdin, but not both. This enables securely passing sensitive parameters to DSC without writing them to a file or defining them as an environment variable. -
Added the
--inputand--fileoptions to the dsc resource export command to enable filtering the exported instances.Prior to this change, DSC would send resources the defined properties for filtering when a user invoked the
dsc config exportcommand, but the same behavior wasn't available when directly invoking the Export operation on a resource. -
Added the YAML document separator (
---) between output objects when you invoke a DSC command with YAML as the output format. Prior to this change, it was dificult to distinguish between output objects and to parse the output programmatically. -
Added the
table-no-truncateformat option to thedsc resource listcommand to avoid truncating the table due to the width of the console. -
Added the
json-arrayformat option to thedsc resource get --allcommand for easier integration and scripting. -
Added the
pass-throughformat option to thedsc resource getcommand to return the data directly from the resource without wrapping it in a result. This enables usage by higher order tools without requiring them to unwrap the result object.Related work items
- Issues: None
- PRs: #862
-
Added the
exporterresource kind. You can now define a DSC resource that only implements the Export operation to use for inventory and fact-gathering scenarios. Resources with thekindfield in their manifest set toexportermust return full resource instances as JSONLINEs. DSC then recursively invokes the Export operation for those returned instances, enabling you to dynamically generate an inventory without specifying every single resource type you want to retrieve from the system. -
Added support for the
Microsoft.Windows/Registryresource to support defining a registry value without any data (RZ_NONE). Prior to this change, users were required to specify both thevalueNameandvalueDataproperties when defining a registry value. Starting with this release, you can define an instance of the resource withoutvalueData. -
Added a warning message during resource discovery when DSC finds a resource manifest that includes an executable that doesn't exist. This helps inform a user about whether a resource manifest is invalid before making any attempts to invoke that resource directly or starting a broader configuration operation.
Related work items
- Issues: None
- PRs: #688
-
Added support for the Export operation to the
Microsoft.Windows/WindowsPowerShelladapter. This functionality mirrors the capability of theMicrosoft.DSC/PowerShelladapter and only supports Export for adapted PSDSC resources implemented as PowerShell classes.
-
Fixed a bug in the
Microsoft.DSC/PowerShellandMicrosoft.Windows/WindowsPowerShelladapters that caused an error when a previously cached PSDSC resource module no longer exists on the system. -
Fixed a bug that incorrectly handled resource instances without any properties defined. Prior to this change, specifying a resource instance without properties raised an error in the engine.
Related work items
- Issues: None
- PRs: #675
-
Fixed the
Microsoft.DSC.Transitional/RunCommandOnSetresource to invoke correctly duringdsc configoperations. Prior to this change, the resource never reported as being out of the desired state, so DSC never invoked the resource with thedsc config setcommand. -
Fixed a bug in the engine that erroneously dropped any metadata returned by a resource that wasn't part of the defined Microsoft.DSC metadata object. Starting with this release, all metadata emitted by a resource is correctly returned in the output for a command.
-
Fixed the behavior of the
DSC_RESOURCE_PATHenvironment variable to limit discovery for both resource manifests and executables. Prior to this change, DSC searched thePATHfor executables referenced in manifests, even whenDSC_RESOURCE_PATHis defined. Now when you set theDSC_RESOURCE_PATHvariable, DSC only uses those paths for discovery, as intended. -
Fixed the
Microsoft.Windows/Registryresource to correctly handle hives with a single subkey.Related work items
- Issues: None
- PRs: #684
-
Fixed the
Microsoft.Windows/Registryresource to correctly handle being called to delete a nonexistant key instead of erroring. -
Fixed the behavior of configuration expressions in nested instances. Prior to this change, DSC attempted to recursively resolve configuration expressions before invoking group resources, causing errors when referencing not-yet-invoked nested instances. DSC no longer recursively resolves configuration expressions, requiring the group resource to resolve nested expressions instead. Every built-in group resource provided with DSC supports resolving nested expressions.
-
Fixed error messaging for duplicate resource instance names. Prior to this change, the error message didn't correctly indicate the name of the duplicate resource instance.
-
Fixed the JSON Schema of the
Microsoft.DSC/PendingRebootresource to allow specifying whether a pending reboot is expected with theMicrosoft.DSC/Assertionresource. -
Fixed a bug in the
Microsoft.DSC/PowerShellandMicrosoft.Windows/WindowsPowerShelladapters that caused failures when a PSDSC resource defined any property with subproperties, like a hashtable or custom class. The adapters now correctly handle creating complex properties for adapted PSDSC resources. -
Fixed a bug in the caching for the
Microsoft.DSC/PowerShellandMicrosoft.Windows/WindowsPowerShelladapters that caused errors when PowerShell modules are installed, updated, or removed during a configuration operation. Starting with this release, the adapters correctly handle cache invalidation. -
Fixed support in the
Microsoft.DSC/PowerShellandMicrosoft.Windows/WindowsPowerShelladapters for passing credentials to adapted PSDSC resources. Previously, using any PSDSC resources with a PSCredential property failed because the adapters didn't correctly cast the input data. -
Fixed the handling of enum values in the
Microsoft.DSC/PowerShelladapter to return them as strings, not integers, for readability. -
Fixed the handling of hidden properties in the
Microsoft.Windows/WindowsPowerShelladapter to prevent them from being erroneously included in the output for a resource. -
Fixed bugs in the discovery for the
Microsoft.Windows/WindowsPowerShelladapter to:- Prepend the built-in module path (
$Env:SystemRoot\System32\WindowsPowerShell\1.0\Modules). - Remove PowerShell modules from the path.
- Ensure PSDSC resources implemented as classes are discoverable.
- Iindicate when a PSDSC resource can't be found that the adapter requires PSDSC resource modules
to be installed in the
AllUsersscope.
- Prepend the built-in module path (
v3.0.2 - 2025-04-08
This section includes a summary of changes for the 3.0.2 release. For the full list of changes
in this release, see the diff on GitHub.
-
Fixed the
Microsoft.DSC/PowerShellandMicrosoft.Windows/WindowsPowerShellresources to bypass execution policy when invoked. Prior to this change, the adapters would raise a nondescriptive error when the PowerShell execution policy on a machine is restricted, which is the default state. -
Fixed a bug in the
Microsoft.DSC/Assertiongroup resource that prevented it from reporting a failure when nested resource instances aren't in the desired state. Now when any nested instance for the group fails, the group reports a failure, preventing dependent resources from invoking needlessly.
v3.0.1 - 2025-03-27
This section includes a summary of changes for the 3.0.1 release. For the full list of changes
in this release, see the diff on GitHub.
-
Fixed the build for ARM64 Linux to correctly produce a
.tar.gzfile. Prior to this change, the artifact couldn't be unzipped. -
Fixed a bug in the DSC engine to correctly propagate the
_inDesiredStatecanonical property for resources that implement the Test operation. Prior to this change, the engine would erroneously perform a synthetic test, which lead to misreporting. -
Fixed the implementation for the
Microsoft.DSC/PowerShellandMicrosoft.Windows/WindowsPowerShelladapters to correctly insert the_inDesiredStatecanonical property when returning data for the Test operation. Prior to this release, the results for adapted PSDSC resources would incorrectly report their status.Related work items
- Issues: None
- PRs: #699
-
Fixed a bug in tracing that inspected messages for incorrectly cased keys, preventing DSC from surfacing those messages.
Related work items
- Issues: None
- PRs: #699
-
Fixed tracing for the
Microsoft.DSC/PowerShellandMicrosoft.Windows/WindowsPowerShelladapters to surface more useful messages during operations, particularly for debugging and error messaging.Related work items
- Issues: None
- PRs: #699
-
Fixed the progress reporting when the --progress-format option is set to
jsonby no longer displaying the progress bar when you invoke DSC interactively.Related work items
- Issues: None
- PRs: #644
-
Fixed writing progress when reporting on an indeterminate number of items by starting at
1and incrementing the counter. Prior to this change it was difficult to track progress for these items.Related work items
- Issues: None
- PRs: #644
v3.0.0 - 2025-02-28
Version 3.0.0 is the first generally available release of DSC.