{"id":20702,"date":"2025-03-12T09:58:25","date_gmt":"2025-03-12T17:58:25","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/powershell\/?p=20702"},"modified":"2025-03-12T09:58:25","modified_gmt":"2025-03-12T17:58:25","slug":"announcing-dsc-v3","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/announcing-dsc-v3\/","title":{"rendered":"Announcing Microsoft Desired State Configuration v3.0.0"},"content":{"rendered":"<p><!-- markdownlint-disable MD041 --><\/p>\n<p><em>This is the first post in a multi-part series about the new release of DSC.<\/em><\/p>\n<p><strong>We&#8217;re pleased to announce the General Availability of Microsoft&#8217;s Desired State Configuration (DSC)<\/strong>\n<strong>version 3.0.0.<\/strong><\/p>\n<p>This version marks a significant evolution in cloud-native configuration management\nfor cross-platform environments. DSC is a declarative configuration and orchestration platform that\ndefines a standard way of exposing settings for applications and services. It&#8217;s a tool for managing\nsystems and applications by describing what they should look like rather than how to make it that\nway. DSC simplifies system, service, and application management by separating what to do from how to\ndo it.<\/p>\n<h2>Benefits of DSC<\/h2>\n<ul>\n<li><strong>Declarative and Idempotent<\/strong>: DSC configuration documents are declarative JSON or YAML files\nthat define the desired state of your system in a straight-forward way. They include the instances\nof DSC resources that need configuration. DSC ensures the system matches that state, repeatedly if\nneeded, without making unnecessary changes.<\/li>\n<li><strong>Flexible<\/strong>: DSC Resources define how to manage state for a particular system or application\ncomponent. Resources can be authored in any language, not only PowerShell.<\/li>\n<li><strong>Cross-Platform<\/strong>: DSC works on Linux, macOS, and Windows without needing extra tools or\ndependencies.<\/li>\n<li><strong>Integratable<\/strong>: Designed to be easily integrated into existing configuration solutions. DSC\nreturns schematized JSON objects for trace messages and command output. Tool developers and script\nauthors can easily validate and parse the output for integration with other configuration tools\nand frameworks. DSC simplifies how you call it by accepting JSON from stdin for all configuration\nand resource commands. DSC resources include a manifest that defines the resource properties as a\nJSON schema and how to invoke the resource. You can reuse this definition across various\ntoolchains for tighter integration with DSC.<\/li>\n<li><strong>Backwards compatible<\/strong>: This release of DSC can use all existing PowerShell 7 and Windows\nPowerShell DSC resources.<\/li>\n<\/ul>\n<p>With DSC, you can:<\/p>\n<ul>\n<li>Create configuration files that define how your environment should look.<\/li>\n<li>Write DSC resources in any programming language to manage your systems and applications.<\/li>\n<li>Invoke DSC resources to perform specific actions.<\/li>\n<li>Define a standard way for applications and services to make their settings discoverable and\nusable. This means that you can discover and invoke resources directly, even without DSC.<\/li>\n<\/ul>\n<h2>Differences from PowerShell DSC<\/h2>\n<p>Windows PowerShell 5.1 includes PowerShell Desired State Configuration (PSDSC). We refer to as\nclassic DSC, which encompasses PSDSC v1.1 and v2. However, DSC can use any classic DSC resources\nthat exist today, including the script-based and class-based PSDSC resources. You can use PSDSC\nresources in DSC with both Windows PowerShell and PowerShell.<\/p>\n<p>The release of DSC is a major change to the DSC platform. DSC differs from PSDSC in a few important\nways:<\/p>\n<ul>\n<li>DSC no longer includes or supports the Local Configuration Manager (LCM).<\/li>\n<li>DSC doesn&#8217;t depend on PowerShell. You can use DSC without PowerShell installed and manage\nresources written in bash, python, C#, Go, or any other language.<\/li>\n<li>DSC doesn&#8217;t include a local configuration manager. DSC is invoked as a command-line tool. It doesn&#8217;t\nrun as a service.<\/li>\n<li>The PSDSC configuration documents used Managed Object Format (MOF) files. Few tools were able to\nparse MOF files, especially on non-Windows platforms. DSC isn&#8217;t compatible with MOF files, but you\ncan still use all existing PSDSC resources.<\/li>\n<li>DSC is built on industry standards, such as JSON, JSON Schema, and YAML. These standards make DSC\neasier to integrate into tools and workflows compared to PSDSC.<\/li>\n<li>DSC configuration documents are defined in JSON or YAML. The configuration documents use\nexpression functions to enable dynamic values, rather than using PowerShell code to retrieve\nenvironment variables or join strings.<\/li>\n<li>DSC supports supplying parameter values for configuration documents at runtime either as JSON\nor by pointing to a parameters file instead of generating a configuration MOF file before\napplying the configuration.<\/li>\n<li>Unlike PSDSC, DSC returns strongly structured output. This structured output adheres to a\npublished JSON Schema, making it easier to understand the output and to integrate it into your own\nscripts, reporting, and other tooling. When you <strong>test<\/strong> or <strong>set<\/strong> resources and configurations\nwith DSC, the output tells you <em>how<\/em> a resource is out of the desired state or <em>what<\/em> DSC changed\non your system.<\/li>\n<\/ul>\n<h2>Features of DSC<\/h2>\n<ul>\n<li><strong>Groups<\/strong>: DSC supports a new resource kind that changes how DSC processes a list of resources.\nResource authors can define their own group resources and configuration authors can use any of the\nbuilt-in group resources.The DSC repository has an <a href=\"https:\/\/github.com\/PowerShell\/DSC\/blob\/main\/dsc\/examples\/groups.dsc.yaml\">example<\/a> that shows how you can group resources together and use\nthe <code>dependsOn<\/code> keyword to define the order those groups are applied in a configuration.<\/li>\n<li><strong>Assertions<\/strong>: Use the <code>Microsoft.Dsc\/Assertion<\/code> (a special group resource) to validate the\nenvironment before running the configuration.The DSC repository has an <a href=\"https:\/\/github.com\/PowerShell\/DSC\/blob\/main\/dsc\/examples\/assertion.dsc.yaml\">example<\/a> that shows how you can use an assertion to manage a\nresource that should only run on a specific operating system.<\/li>\n<li><strong>Importers<\/strong>: DSC supports a new resource kind that pulls in a configuration from an external\nsource for reuse in the current configuration document. Resource authors can define their own\nimporter resources and configuration authors can use the built-in <code>Microsoft.DSC\/Include<\/code>\nresource.The DSC repository has an <a href=\"https:\/\/github.com\/PowerShell\/DSC\/blob\/main\/dsc\/examples\/include.dsc.yaml\">example<\/a> that shows how you can use the <code>Microsoft.Dsc\/Include<\/code>\nresource to reuse a separate configuration document file, enabling you to compose a complex\nconfiguration from smaller, simpler configuration documents.<\/li>\n<li><strong>Exporting<\/strong>: DSC supports a new operation that resources can implement to return the list of all\nexisting instances of that resource. You can use the <a href=\"https:\/\/learn.microsoft.com\/en-us\/powershell\/dsc\/reference\/cli\/resource\/export?view=dsc-3.0&amp;preserveView=true\"><code>dsc resource export<\/code><\/a> command to get\nevery instance of that resource on a machine. Use the <a href=\"https:\/\/learn.microsoft.com\/en-us\/powershell\/dsc\/reference\/cli\/config\/export?view=dsc-3.0&amp;preserveView=true\"><code>dsc config export<\/code><\/a> command to look up\na set of resources and return a new configuration document containing every instance of those\nresources.<\/li>\n<li><strong>Configuration functions<\/strong>: DSC configuration documents support a <a href=\"https:\/\/learn.microsoft.com\/en-us\/powershell\/dsc\/reference\/schemas\/config\/functions\/overview?view=dsc-3.0&amp;preserveView=true\">set of functions<\/a> that\nenable you to change how DSC processes the resources.The DSC repository has an <a href=\"https:\/\/github.com\/PowerShell\/DSC\/blob\/main\/dsc\/examples\/reference.dsc.yaml\">example<\/a> that shows how you can reference the output from one\nresource in the properties of another.<\/li>\n<\/ul>\n<h2>Support lifecycle<\/h2>\n<p>DSC follows semantic versioning. The first release of DSC, version 3.0.0, is a Stable release.<\/p>\n<p>The first release of DSC, version <code>3.0.0<\/code>, is a Stable release. Patch releases update the third\ndigit of the semantic version number. For example, 3.0.1 is a patch update to 3.0.0. Stable releases\nreceive patches for critical bugs and security vulnerabilities for three months after the next\nStable release. For example, version 3.0.0 is supported for three months after 3.1.0 is released.<\/p>\n<p>Always update to the latest patch version of the release you&#8217;re using.<\/p>\n<h2>Next steps<\/h2>\n<p>As I mentioned at the top of this post, this was the first in a series of posts about the new DSC. For the subsequent posts:<\/p>\n<ul>\n<li><strong>DSC<\/strong> refers to Desired State Configuration (DSC) v3.0.0<\/li>\n<li><strong>PSDSC<\/strong> refers to PowerShell Desired State Configuration (PSDSC) v1.1 and v2<\/li>\n<\/ul>\n<p>Now you are ready for the next post: <a href=\"https:\/\/devblogs.microsoft.com\/powershell\/get-started-with-dsc-v3\/\">Get Started with Desired State Configuration v3.0.0 (DSC)<\/a><\/p>\n<h2>Call to action<\/h2>\n<p>For more information about Desired State Configuration v3.0 (DSC), visit the\n<a href=\"https:\/\/learn.microsoft.com\/powershell\/dsc\/overview?view=dsc-3.0&amp;preserveView=true\">DSC documentation<\/a>. We value your feedback. Stop by our <a href=\"https:\/\/github.com\/PowerShell\/DSC\">GitHub repository<\/a> and let us\nknow of any issues you find.<\/p>\n<p>Jason Helmick<\/p>\n<p>Sr. Product Manager, PowerShell<\/p>\n<p><!-- link references --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This post announces the release of Microsoft Desired State Configuration v3.0.0. We discuss the features and benefits of DSC and how it differs from PowerShell DSC.<\/p>\n","protected":false},"author":7527,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[3197],"class_list":["post-20702","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell","tag-powershell-dsc"],"acf":[],"blog_post_summary":"<p>This post announces the release of Microsoft Desired State Configuration v3.0.0. We discuss the features and benefits of DSC and how it differs from PowerShell DSC.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/20702","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/7527"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=20702"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/20702\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=20702"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=20702"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=20702"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}