{"id":1991,"date":"2013-11-05T11:28:23","date_gmt":"2013-11-05T11:28:23","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/2013\/11\/05\/understanding-configuration-keyword-in-desired-state-configuration\/"},"modified":"2019-02-18T13:05:29","modified_gmt":"2019-02-18T20:05:29","slug":"understanding-configuration-keyword-in-desired-state-configuration","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/understanding-configuration-keyword-in-desired-state-configuration\/","title":{"rendered":"Understanding CONFIGURATION keyword in Desired State Configuration"},"content":{"rendered":"<div class=\"WordSection1\">\n<p class=\"MsoNormal\"><a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/dn249912.aspx\">Desired State Configuration<\/a> is a new management platform in Windows Powershell that enables devOps scenarios on Windows. It enables system administrators and devOps to configure a system declaratively, enforce the configuration and reuse configuration. One core aspect of it is the language extension for Configuration keyword in Powershell.<\/p>\n<p class=\"MsoNormal\">You can express configurations of your machine using configuration keyword as shown below which is taken from the <a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/dn249918.aspx\">MSDN documentation<\/a><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: white\"><span style=\"font-size: 9.0pt;font-family: 'Lucida Console';color: darkblue\">Configuration<\/span><span style=\"font-size: 9.0pt;font-family: 'Lucida Console'\"> <span style=\"color: blueviolet\">MyWebConfig<\/span><br \/> {<br \/> &nbsp;&nbsp; <span style=\"color: darkgreen\"># A Configuration block can have zero or more Node blocks<\/span><br \/> &nbsp;&nbsp; Node <span style=\"color: darkred\">&#8220;Server001&#8221;<\/span><br \/> &nbsp;&nbsp; {<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: darkgreen\"># Next, specify one or more resource blocks<\/span><\/p>\n<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: darkgreen\"># WindowsFeature is one of the built-in resources you can use in a Node block<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: darkgreen\"># This example ensures the Web Server (IIS) role is installed<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WindowsFeature <span style=\"color: blueviolet\">MyRoleExample<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/> <span style=\"color: darkgreen\">&nbsp;&nbsp; # To uninstall the role, set Ensure to &#8220;Absent&#8221;<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ensure <span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;Present&#8221;<\/span> <br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Name &nbsp;&nbsp;<span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;Web-Server&#8221;<\/span>&nbsp; <br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: darkgreen\"># File is a built-in resource you can use to manage files and directories<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style=\"color: darkgreen\"># This example ensures files from the source directory are present<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File <span style=\"color: blueviolet\">MyFileExample<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/> <span style=\"color: darkgreen\">&nbsp;&nbsp; # You can also set Ensure to &#8220;Absent&#8221;<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ensure <span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;Present&#8221;<\/span>&nbsp; <br \/> <span style=\"color: darkgreen\">&nbsp;&nbsp; # Default is &ldquo;File&rdquo;<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type <span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;Directory&#8221;<\/span> <br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Recurse <span style=\"color: darkgray\">=<\/span> <span style=\"color: orangered\">$true<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SourcePath <span style=\"color: darkgray\">=<\/span> <span style=\"color: orangered\">$WebsiteFilePath<\/span> <br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DestinationPath <span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;C:\\inetpub\\wwwroot&#8221;<\/span> <br \/> <span style=\"color: darkgreen\">&nbsp; #This ensures that MyRoleExample completes successfully before<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DependsOn <span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;[WindowsFeature]MyRoleExample&#8221;<\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/> }<br \/> &nbsp;&nbsp; }<br \/> } <br \/> &nbsp;<\/span><\/p>\n<p class=\"MsoNormal\">From the sample you can see that we added one keyword, <strong>configuration,<\/strong> that can be used to declaratively define configurations and there is one dynamic keyword Node you can use inside configuration and a set of resources which are also act like keywords. You can find the list of resources and their properties by using Get-DscResource cmdlet. Here is the output I have when using it on a Windows Server 2012 R2 machine.<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #012456\"><span style=\"font-size: 9.0pt;font-family: 'Lucida Console';color: whitesmoke\">ImplementedAs&nbsp;&nbsp; Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Proper<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ties&nbsp; <br \/> &#8212;&#8212;&#8212;&#8212;-&nbsp;&nbsp; &#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;<br \/> Binary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {De&#8230;<br \/> PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Archive&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {De&#8230;<br \/> PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Environment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {Na&#8230;<br \/> PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Group&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {Gr&#8230;<br \/> Binary&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Log&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {Me&#8230;<br \/> PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {Na&#8230;<br \/> PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Registry&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {Ke&#8230;<br \/> PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Script&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {Ge&#8230;<br \/> PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Service&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {Na&#8230;<br \/> PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; User&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {Us&#8230;<br \/> PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WindowsFeature&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {Na&#8230;<br \/> PowerShell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WindowsProcess&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PSDesiredStateConfiguration&nbsp;&nbsp;&nbsp; {Ar&#8230;<\/p>\n<p> <\/span><\/p>\n<p class=\"MsoNormal\"> Configuration is a keyword with simple name, which means it can have constant string or variables as its name. It is the only new keyword added by default for desired state configuration. The syntax of it looks like function which means it can be followed by a scriptblock with some restriction. You can only have parameter block and default process block. Overall configuration definition syntax looks like function definition. Indeed it creates a command with the name you just specified and you can invoke it with some additional parameters such as output directory and configuration data. However since it has different semantics with functions we created a new command type called Configuration. If you save above sample as sample.psm1 and invoke import-module .\\sample.psm1, you will see new configuration command listed in the output of get-command<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #012456\"><span style=\"font-size: 9.0pt;font-family: 'Lucida Console';color: whitesmoke\">PS D:\\dsctest&gt; <\/span><span style=\"font-size: 9.0pt;font-family: 'Lucida Console';color: lightcyan\">Get-Command<\/span><span style=\"font-size: 9.0pt;font-family: 'Lucida Console';color: moccasin\">-CommandType<\/span><span style=\"font-size: 9.0pt;font-family: 'Lucida Console';color: violet\">Configuration <br \/> <\/span><span style=\"font-size: 9.0pt;font-family: 'Lucida Console';color: whitesmoke\">CommandType&nbsp;&nbsp;&nbsp;&nbsp; Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ModuleName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/> &#8212;&#8212;&#8212;&#8211;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Configuration&nbsp;&nbsp; MyWebConfig&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sample&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br \/> PS D:\\dsctest&gt; Get-Help MyWebConfig<br \/> NAME<br \/> &nbsp;&nbsp;&nbsp; MyWebConfig<br \/> &nbsp;&nbsp;&nbsp; <br \/> SYNTAX<br \/> &nbsp;&nbsp;&nbsp; MyWebConfig [[-InstanceName] &lt;string&gt;] [[-OutputPath] &lt;string&gt;] <br \/> &nbsp;&nbsp;&nbsp; [[-ConfigurationData] &lt;hashtable&gt;]&nbsp; <br \/> &nbsp;&nbsp;&nbsp; <\/p>\n<p> ALIASES<br \/> &nbsp;&nbsp;&nbsp; None<br \/> &nbsp;&nbsp;&nbsp; <br \/> REMARKS<br \/> &nbsp;&nbsp;&nbsp; None <br \/> <\/span> <\/p>\n<p class=\"MsoNormal\">After that, you can invoke MyWebConfig as other command by typing MyWebConfig. This command will generate a MOF file that can be send to the targeting machine to configure it. MOF is a Distributed management task force standard for <a href=\"http:\/\/dmtf.org\/education\/mof\">Common Information Model(CIM)<\/a><\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #012456\"><span style=\"font-size: 9.0pt;font-family: 'Lucida Console';color: whitesmoke\">PS D:\\dsctest&gt; MyWebConfig<\/p>\n<p> &nbsp;&nbsp;&nbsp; Directory: D:\\dsctest\\MyWebConfig<\/p>\n<p> Mode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LastWriteTime&nbsp;&nbsp;&nbsp;&nbsp; Length Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/> &#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212;&#8212;&#8212;-&nbsp;&nbsp;&nbsp;&nbsp; &#8212;&#8212; &#8212;-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br \/> -a&#8212;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10\/14\/2013&nbsp;&nbsp; 3:27 PM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2020 Server001.mof&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n<p> &nbsp;<\/p>\n<p> <\/span><\/p>\n<p class=\"MsoNormal\">Now we know this new Configuration keyword let&rsquo;s dig into the configuration body to know what we can specify inside. Powershell will add two dynamic keywords, Node and Import-DscResource, by default once inside the configuration block. Node conceptually represents a machine you want to configure. You can specify a set of resources inside each Node block. Each resource specification starts with the resource name and contains a hashtable body that represent concrete configuration settings as shown in the example at the very beginning. You can find more information about DSC resources from <a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/dn249921.aspx\">technet site<\/a>.<br \/> We can discover the set of resources that are available on the machine using Get-DscResource cmdlet. These resources are the resources you can use inside node block. However there is a little caveat here user needs to be aware. PowerShell will automatically load the resource as keyword If the resource&rsquo;s parentPath is under system path such as $pshome\\modules or $env:systemRoot\\system32\\configuration. If it is under $env:PSModulePath other than system path, &nbsp;we will need to use Import-DscResource to load the resource so powershell parser can understand it. We can see the detailed information of a resource using below commands.<\/p>\n<p class=\"MsoNormal\" style=\"margin-bottom: .0001pt;line-height: normal;background: #012456\"><span style=\"font-size: 9.0pt;font-family: 'Lucida Console';color: whitesmoke\">PS D:\\dsctest&gt; Get-DscResource -name file | fl<\/p>\n<p> ResourceType&nbsp; : MSFT_FileDirectoryConfiguration<br \/> Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : File<br \/> FriendlyName&nbsp; : File<br \/> Module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : <br \/> Path&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : <br \/> ParentPath&nbsp;&nbsp;&nbsp; : C:\\WINDOWS\\system32\\Configuration\\Schema\\MSFT_FileDirectoryConf<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; iguration<br \/> ImplementedAs : Binary<br \/> CompanyName&nbsp;&nbsp; : <br \/> Properties&nbsp;&nbsp;&nbsp; : {DestinationPath, Attributes, Checksum, Contents&#8230;}<\/p>\n<p> <\/span>&nbsp;<\/p>\n<p class=\"MsoNormal\">All these resources are loaded as dynamic keywords which we will not have enough time to discuss this time. Hopefully we can get to them in the next post.<\/p>\n<p class=\"MsoNormal\">In addition to resources provided by the Desired State Configuration, user can build their own resources and there is a good <a href=\"http:\/\/technet.microsoft.com\/en-us\/library\/dn249927.aspx\">TechNet documentation<\/a> for it. That document mainly talked about powershell module based resources. User can actually add a resource using configuration itself as well. Here is an example:<\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 9.0pt;line-height: 107%;font-family: 'Lucida Console';color: darkblue\">configuration<\/span><span style=\"font-size: 9.0pt;line-height: 107%;font-family: 'Lucida Console'\">&nbsp; <span style=\"color: blueviolet\">scriptdsc<\/span><br \/> { <br \/> &nbsp;&nbsp;&nbsp; <span style=\"color: darkblue\">param<\/span> (<span style=\"color: orangered\">$one<\/span><span style=\"color: darkgray\">,<\/span> <span style=\"color: orangered\">$two<\/span>)<\/p>\n<p> &nbsp;&nbsp;&nbsp; Log <span style=\"color: blueviolet\">scriptDscLogResource<\/span><br \/> &nbsp;&nbsp;&nbsp; {<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Message <span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;This is the message from the embedded log resource: one=<\/span><span style=\"color: orangered\">$one<\/span><span style=\"color: darkred\"> two=<\/span><span style=\"color: orangered\">$two<\/span><span style=\"color: darkred\"> three=<\/span><span style=\"color: orangered\">$three<\/span><span style=\"color: darkred\">&#8220;<\/span><br \/> &nbsp;&nbsp;&nbsp; }<\/p>\n<p> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File <span style=\"color: blueviolet\">MyFileExample<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ensure <span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;Present&#8221;<\/span>&nbsp; <br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Type <span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;Directory&ldquo;<\/span> <span style=\"color: darkgreen\"># Default is &ldquo;File&rdquo;<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Recurse <span style=\"color: darkgray\">=<\/span> <span style=\"color: orangered\">$true<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SourcePath <span style=\"color: darkgray\">=<\/span> <span style=\"color: orangered\">$one<\/span> <span style=\"color: darkgreen\"># This is a path that has web files<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DestinationPath <span style=\"color: darkgray\">=<\/span> <span style=\"color: orangered\">$two<\/span> <span style=\"color: darkgreen\"># The path where we want to ensure the web files are present<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/> }<\/p>\n<p> <span style=\"color: blue\">Export-ModuleMember<\/span> <span style=\"color: navy\">-Function<\/span> <span style=\"color: blueviolet\">scriptdsc<\/span><br \/> &nbsp;<br \/> <\/span>This file has to be named resourceName.Schema.psm1 and have a companion resourceName.psd1 file. After that, you can deploy it as any other Powershell resources. This capability enable the user to compose configurations and leverage existing configurations created by others like below.<\/p>\n<p class=\"MsoNormal\"><span style=\"font-size: 9.0pt;line-height: 107%;font-family: 'Lucida Console';color: darkblue\">Configuration<\/span><span style=\"font-size: 9.0pt;line-height: 107%;font-family: 'Lucida Console'\"> <span style=\"color: blueviolet\">MyConfig<\/span><br \/> {<br \/> &nbsp;&nbsp; Node <span style=\"color: darkred\">&#8220;Server001&#8221;<\/span><br \/> &nbsp;&nbsp; {<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; scriptdsc <span style=\"color: blueviolet\">MyExample<\/span><br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; One <span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;\\\\share\\file.txt&#8221;<\/span> <br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Two <span style=\"color: darkgray\">=<\/span> <span style=\"color: darkred\">&#8220;d:\\file.txt&#8221;<\/span>&nbsp; <br \/> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/> &nbsp;&nbsp; }<br \/> } <br \/> <\/span><br \/> In this post we gave a quick introduction to the configuration keyword in powershell. I will talk more about customizing configuration using configurationData, specify embedded objects in configuration and $using variables in the future blog. We will also dig into the implementation of dynamic keywords if that is interesting to more people.<\/p>\n<p class=\"MsoNormal\">&nbsp;<\/p>\n<p class=\"MsoNormal\">Joe Zhou <br \/> SDE<\/p>\n<p class=\"MsoListParagraph\" style=\"margin-left: 1.0in\">&nbsp;<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Desired State Configuration is a new management platform in Windows Powershell that enables devOps scenarios on Windows. It enables system administrators and devOps to configure a system declaratively, enforce the configuration and reuse configuration. One core aspect of it is the language extension for Configuration keyword in Powershell. You can express configurations of your machine [&hellip;]<\/p>\n","protected":false},"author":600,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[142,150,248,251,345,348],"class_list":["post-1991","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell","tag-desired-state-configuration","tag-dsc","tag-powershell","tag-powershell-4-0","tag-windows-powershell-4-0","tag-windows-powershell-desired-state-configuration"],"acf":[],"blog_post_summary":"<p>Desired State Configuration is a new management platform in Windows Powershell that enables devOps scenarios on Windows. It enables system administrators and devOps to configure a system declaratively, enforce the configuration and reuse configuration. One core aspect of it is the language extension for Configuration keyword in Powershell. You can express configurations of your machine [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/1991","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\/600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=1991"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/1991\/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=1991"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=1991"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=1991"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}