&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Articles from March 2014 on PowerShell.org - Welcome Automaters!</title><link>https://powershell.org/articles/2014/03/</link><description>Recent content in Articles from March 2014 on PowerShell.org - Welcome Automaters!</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://powershell.org/articles/2014/03/index.xml" rel="self" type="application/rss+xml"/><item><title>April 3, 2014 Virtual PowerShell User Group meeting</title><link>https://powershell.org/articles/2014-03-29-april-3-2014-virtual-powershell-user-group-meeting/</link><guid>https://powershell.org/articles/2014-03-29-april-3-2014-virtual-powershell-user-group-meeting/</guid><pubDate>Sat, 29 Mar 2014 21:11:12 +0000</pubDate><description>&lt;p&gt;PowerShell MVP Joel Bennett will present about authoring PowerShell modules, including tips, tricks and best practices for writing modules and functions that work well together (and behave properly in the pipeline) &amp;hellip; and&amp;hellip;&lt;br&gt;
NOTE: if you have QUESTIONS about PowerShell modules which you would like addressed, you can start adding them to the Q&amp;amp;A bar (and voting to rank them) already. Just click the &amp;ldquo;Q&amp;amp;A&amp;rdquo; icon overlay on the video placeholder:&lt;br&gt;
&lt;a href="https://plus.google.com/hangouts/onair/watch?hid=hoaevent%2Fcval1ku1pro5uijqk4fnmfk45lo&amp;amp;hl=en&amp;amp;t=0"&gt;https://plus.google.com/hangouts/onair/watch?hid=hoaevent%2Fcval1ku1pro5uijqk4fnmfk45lo&amp;amp;hl=en&amp;amp;t=0&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>PowerShell MVP Joel Bennett will present about authoring PowerShell modules, including tips, tricks and best practices for writing modules and functions that work well together (and behave properly in the pipeline) &hellip; and&hellip;<br>
NOTE: if you have QUESTIONS about PowerShell modules which you would like addressed, you can start adding them to the Q&amp;A bar (and voting to rank them) already. Just click the &ldquo;Q&amp;A&rdquo; icon overlay on the video placeholder:<br><a href="https://plus.google.com/hangouts/onair/watch?hid=hoaevent%2Fcval1ku1pro5uijqk4fnmfk45lo&amp;hl=en&amp;t=0">https://plus.google.com/hangouts/onair/watch?hid=hoaevent%2Fcval1ku1pro5uijqk4fnmfk45lo&amp;hl=en&amp;t=0</a></p><p>* *</p>
]]></content:encoded></item><item><title>Code from this week's Oslo class</title><link>https://powershell.org/articles/2014-03-26-code-from-this-weeks-oslo-class/</link><guid>https://powershell.org/articles/2014-03-26-code-from-this-weeks-oslo-class/</guid><pubDate>Wed, 26 Mar 2014 12:04:42 +0000</pubDate><description>&lt;p&gt;&lt;a href="https://powershell.org/wp-content/uploads/2014/03/OSTools.zip"&gt;OSTools&lt;/a&gt; - download for my class in Oslo this week.&lt;br&gt;
Here&amp;rsquo;s some more: &lt;a href="https://powershell.org/wp-content/uploads/2014/03/share.zip"&gt;share&lt;/a&gt;&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p><a href="https://powershell.org/wp-content/uploads/2014/03/OSTools.zip">OSTools</a> - download for my class in Oslo this week.<br>
Here&rsquo;s some more:<a href="https://powershell.org/wp-content/uploads/2014/03/share.zip">share</a></p>
]]></content:encoded></item><item><title>We Want Your DSC Resource Wish List!</title><link>https://powershell.org/articles/2014-03-20-we-want-your-dsc-resource-wish-list/</link><guid>https://powershell.org/articles/2014-03-20-we-want-your-dsc-resource-wish-list/</guid><pubDate>Thu, 20 Mar 2014 16:08:03 +0000</pubDate><description>&lt;p&gt;What sorts of things would you want to configure via DSC that don&amp;rsquo;t already have a resource?&lt;br&gt;
NB: Focusing on the core Windows OS and its components only; Exchange, SharePoint, SQL Server, and other products are off the table for this discussion.&lt;br&gt;
For example, I want a &amp;ldquo;log file rotator&amp;rdquo; resource, that lets me specify a log file folder, an archive folder, and a pair of dates. Files older than one date are moved from the log folder to the archive folder; archived files older than the second date are deleted.&lt;br&gt;
I&amp;rsquo;d also like a File Permissions resource. Specify a folder or file, optional recursion, and a set of access control entries (in plain English terms), and it&amp;rsquo;ll make sure the permissions stay that way.&lt;br&gt;
Maybe also a User Home Folder resource, which would (a) ensure a folder exists for a given set of user accounts, and (b) ensures a set of &amp;ldquo;template&amp;rdquo; permissions, so that each individual user has the rights to their folder, plus rights given to global users like admins.&lt;br&gt;
What resources would YOU like to have to ease configuration and maintenance in YOUR environment? Drop a comment!&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>What sorts of things would you want to configure via DSC that don&rsquo;t already have a resource?<br>
NB: Focusing on the core Windows OS and its components only; Exchange, SharePoint, SQL Server, and other products are off the table for this discussion.<br>
For example, I want a &ldquo;log file rotator&rdquo; resource, that lets me specify a log file folder, an archive folder, and a pair of dates. Files older than one date are moved from the log folder to the archive folder; archived files older than the second date are deleted.<br>
I&rsquo;d also like a File Permissions resource. Specify a folder or file, optional recursion, and a set of access control entries (in plain English terms), and it&rsquo;ll make sure the permissions stay that way.<br>
Maybe also a User Home Folder resource, which would (a) ensure a folder exists for a given set of user accounts, and (b) ensures a set of &ldquo;template&rdquo; permissions, so that each individual user has the rights to their folder, plus rights given to global users like admins.<br>
What resources would YOU like to have to ease configuration and maintenance in YOUR environment? Drop a comment!</p>
]]></content:encoded></item><item><title>Going Deeper on DSC Resources</title><link>https://powershell.org/articles/2014-03-19-going-deeper-on-dsc-resources/</link><guid>https://powershell.org/articles/2014-03-19-going-deeper-on-dsc-resources/</guid><pubDate>Wed, 19 Mar 2014 14:43:37 +0000</pubDate><description>&lt;p&gt;Desired State Configuration is a very new technology and declarative configuration management is a very young space yet.  We (Microsoft and the community) are still figuring out the best structure for resources, composite configurations, and other structures.&lt;br&gt;
That said, there are certain viewpoints that I&amp;rsquo;ve come to, either from hands on experience or in watching how other communities (like the Puppet community or Chef community) handle similar problems.&lt;/p&gt;
&lt;h1 id="how-granular-should-i-get" class="ps-heading"&gt;How Granular Should I Get?&lt;a class="ps-heading-anchor" href="#how-granular-should-i-get" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;There is no absolute answer.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Desired State Configuration is a very new technology and declarative configuration management is a very young space yet.  We (Microsoft and the community) are still figuring out the best structure for resources, composite configurations, and other structures.<br>
That said, there are certain viewpoints that I&rsquo;ve come to, either from hands on experience or in watching how other communities (like the Puppet community or Chef community) handle similar problems.</p><h1 id="how-granular-should-i-get" class="ps-heading">How Granular Should I Get?<a class="ps-heading-anchor" href="#how-granular-should-i-get" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>There is no absolute answer.</p><h2 id="very-very-granular" class="ps-heading">Very, Very Granular<a class="ps-heading-anchor" href="#very-very-granular" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>Resources should be very granular in the abstract, but in practice, you may need to make concessions to improve the user experience.<br>
For example, when I configure an IP address for a network interface, I can supply a default gateway. A default gateway is a route, which is separate from the interface and IP address, but in practice they tend to be configured together. In this case, it might make sense to offer a resource that can configure both the IP address and the default gateway.<br>
I tend to think resources should be very granular. We can use composite resources to offer higher level views of the configuration. If I were implementing a resource to configure a network adapter&rsquo;s IP and gateway, I would have a route resource, an IP address resource, and probably a DNS server setting resource. I would then also have a composite resource to deal with the default use case of configuring a network adapter&rsquo;s IP address, gateway, and DNS servers together.<br>
The benefit of doing it this way is that I still have very discrete, flexible primitives (the IP address resource, the route resource, and the DNS server resource). I can then leverage the route resource to create static routes, or use them directly to more discretely configure the individual elements.</p><h2 id="unless" class="ps-heading">Unless&hellip;<a class="ps-heading-anchor" href="#unless" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>You have some flow control that you need to happen based on the state of the client or the environment.  Since your configuration is statically generated and is declarative, there are no flow control statements in the configuration MOF document.  That means that any logic that needs to occur at application time<br>
Unfortunately, this leads to the need to re-implement common functionality.  For example, if I have a service that I need to be able to update the binary (not via an MSI), I need to basically re-implement parts of the file and service resource.  This use case requires a custom resource because I need to stop the service before I can replace the binary, but I don&rsquo;t want to stop the service with every consistency check if I don&rsquo;t need to replace the file.<br>
This scenario begs for a better way to leverage existing resources in a cross resource scenario (kind of like RequiredModules in module metadata), but there isn&rsquo;t a clean way to do this<strong>that I&rsquo;ve found</strong> (but I&rsquo;m still looking!).</p><h2 id="my-recommendation" class="ps-heading">My Recommendation<a class="ps-heading-anchor" href="#my-recommendation" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>So for most cases, I would try to use existing resources or build very granular custom resources.  If I need to offer a higher level of abstraction, I&rsquo;d escalate to putting a composite resource on top of those granular resources.  Finally, if I need some flow control or logic for a multistep process, I&rsquo;d implement a more comprehensive resource.</p><h1 id="what-should-i-validate" class="ps-heading">What Should I Validate?<a class="ps-heading-anchor" href="#what-should-i-validate" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>Now that we are seeing some more resources in the community repository (especially thanks to the waves of resources from the Powershell Team!), we are seeing a variety of levels of validation being performed.<br>
I think that the Test-TargetResource function should validate all the values and states that Set-TargetResource can set.<br>
An example of where this isn&rsquo;t happening currently is in the<a href="https://github.com/PowerShellOrg/DSC/blob/master/Resources/cNetworking/DSCResources/PSHOrg_cIPAddress/PSHOrg_cIPAddress.psm1">cNetworking resource for PSHOrg_cIPAddress</a>.  I&rsquo;m going to pick on this resource a bit, since it was the catalyst for this discussion.<br>
The resource offers a way to set a default gateway as well as the IP address.  So what happens if after setting the IP and default gateway, someone changes the default gateway to point to another router?<br>
In this case, the validation is only checking that the IP address is correct.  DSC will never re-correct the gateway and our DSC configuration document (the MOF file) is no longer an accurate representation of the system state, despite the fact that the Local Configuration Manager (LCM) will report that everything matches.<br><strong>This is BAD!!</strong>  If a resource offers an option to configure a setting, that setting should be validated by Test-TargetResource, otherwise that setting should be removed from the resource.  The intent of DSC is to control configuration, including changes over time and return a system to the desired state.  If we ignore certain settings, we weaken our trust in the underlying infrastructure of DSC.</p><h1 id="what-should-i-return" class="ps-heading">What should I return?<a class="ps-heading-anchor" href="#what-should-i-return" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>The last element I&rsquo;m going to tackle today is what should be returned from Get-TargetResource.  I&rsquo;ve been on the fence about this one.  Like with Test-TargetResource, there are a number of implementation examples that vary in how they come up with the return values.<br>
Currently, I don&rsquo;t see a ton of use for Get-TargetResource and it doesn&rsquo;t impact the Test and Set phases of the LCM, so it&rsquo;s been easy to ignore.  This is bad practice (shame on me).<br>
Here&rsquo;s my thoughts around Get-TargetResource.  It should return the currently configured state of the machine.  Directly returning parameters passed in is misleading.<br>
Going back to the PSHOrg_cIPAddress from the earlier example, it directly returns the default gateway from the parameter, regardless of the configured gateway.  This wouldn&rsquo;t be so bad if the resource actually checked the gateway during processing and could correct it if it drifted.  But it does not check the gateway, so Get-TargetResource could be lying to you.  T<br>
he most consistent result of Get-TargetResource would be retrieving the currently configured settings.</p><h1 id="whats-left" class="ps-heading">What&rsquo;s left?<a class="ps-heading-anchor" href="#whats-left" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h1><p>What other burning questions do you have around DSC?  Let&rsquo;s keep talking them through either in the<a href="https://powershell.org/forums/forum/windows-powershell-qa/">forums</a> or in the comments here.</p>
]]></content:encoded></item><item><title>My DSC Demo-Class Setup Routine</title><link>https://powershell.org/articles/2014-03-17-my-dsc-demo-class-setup-routine/</link><guid>https://powershell.org/articles/2014-03-17-my-dsc-demo-class-setup-routine/</guid><pubDate>Mon, 17 Mar 2014 22:52:26 +0000</pubDate><description>&lt;p&gt;I think I&amp;rsquo;ve gotten my DSC classroom and demo setup ready. Understand that this isn&amp;rsquo;t meant to be production-friendly - it doesn&amp;rsquo;t automate some stuff because I &lt;strong&gt;want&lt;/strong&gt; to cover that stuff in class by walking through it. But, I thought I&amp;rsquo;d share.&lt;br&gt;
I&amp;rsquo;ve basically made an ISO that I can carry into class, attach to a Win2012R2 VM and a Win81 VM, and run students through. The server VM is a DC in &amp;ldquo;company.pri&amp;rdquo; domain, and the client VM belongs to that domain.&lt;br&gt;
In the root of the ISO are these scripts: &lt;a href="https://powershell.org/wp-content/uploads/2014/03/ISO_Root.zip"&gt;ISO_Root&lt;/a&gt; (unzip that). Students basically just open PowerShell, set the execution policy to RemoteSigned or Unrestricted, and then run &lt;strong&gt;SetupLab -DVD D:&lt;/strong&gt;, replacing &amp;ldquo;D:&amp;rdquo; with the drive letter of the VM&amp;rsquo;s optical drive. The script isn&amp;rsquo;t super-intelligent since I demo it at the same time; it needs the colon after the drive letter.&lt;br&gt;
In a folder called DSC_Modules, I add the following DSC modules (unzipped): xActiveDirectory, xComputerManagement, xDscDiagnostics, xDscResourceDesigner, xNetworking, xPSDesiredStateConfiguration_1.1, xSmbShare, xSqlPs, xWebAdministration.&lt;br&gt;
In a folder called DSC_Pull_Examples, I include these scripts: &lt;a href="https://powershell.org/wp-content/uploads/2014/03/DSC_Pull_Examples.zip"&gt;DSC_Pull_Examples&lt;/a&gt; (unzip that).&lt;br&gt;
In a folder called eBooks, I include these files: &lt;a href="http://files.concentratedtech.com/ebooks.zip"&gt;eBooks&lt;/a&gt; (unzip that). Those get used in a lot of the demos I do, so I have the lab setup scripts copy over some script modules.&lt;br&gt;
In a folder called Help, I have a file called Help.zip. This contains everything downloaded by the Save-Help command in PowerShell. The Setup script unzips this into the VM and then runs Update-Help against it, so the VM doesn&amp;rsquo;t need to be Internet-connected.&lt;br&gt;
In a folder called Hotfix, I have the Windows8.1-KB2883200-x64.msu hot fix installer. I include the 32-bit version also, just in case, but my script doesn&amp;rsquo;t use it.&lt;br&gt;
In a folder called Installers, I have installers for PrimalScript, PowerShell Studio, and SQL Server Express with Advanced Services. Again, those get used a lot in my classes, but the setup script doesn&amp;rsquo;t rely on them.&lt;br&gt;
Finally, in a folder called sxs, I have the contents of the Windows 8.1 installation media&amp;rsquo;s \Sources\sxs folder. Some of the things my setup script does - like adding .NET Framework 3.5 so SQL Server 2012 will work - rely on features that aren&amp;rsquo;t in a Win8.1 VM, normally. Because I don&amp;rsquo;t want to rely on the Internet, I include this source so I can install new features from it.&lt;br&gt;
This is all pretty specific to the way I run classes, but if there&amp;rsquo;s any use you can make of it, feel free.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I think I&rsquo;ve gotten my DSC classroom and demo setup ready. Understand that this isn&rsquo;t meant to be production-friendly - it doesn&rsquo;t automate some stuff because I <strong>want</strong> to cover that stuff in class by walking through it. But, I thought I&rsquo;d share.<br>
I&rsquo;ve basically made an ISO that I can carry into class, attach to a Win2012R2 VM and a Win81 VM, and run students through. The server VM is a DC in &ldquo;company.pri&rdquo; domain, and the client VM belongs to that domain.<br>
In the root of the ISO are these scripts: <a href="https://powershell.org/wp-content/uploads/2014/03/ISO_Root.zip">ISO_Root</a> (unzip that). Students basically just open PowerShell, set the execution policy to RemoteSigned or Unrestricted, and then run <strong>SetupLab -DVD D:</strong>, replacing &ldquo;D:&rdquo; with the drive letter of the VM&rsquo;s optical drive. The script isn&rsquo;t super-intelligent since I demo it at the same time; it needs the colon after the drive letter.<br>
In a folder called DSC_Modules, I add the following DSC modules (unzipped): xActiveDirectory, xComputerManagement, xDscDiagnostics, xDscResourceDesigner, xNetworking, xPSDesiredStateConfiguration_1.1, xSmbShare, xSqlPs, xWebAdministration.<br>
In a folder called DSC_Pull_Examples, I include these scripts: <a href="https://powershell.org/wp-content/uploads/2014/03/DSC_Pull_Examples.zip">DSC_Pull_Examples</a> (unzip that).<br>
In a folder called eBooks, I include these files:<a href="http://files.concentratedtech.com/ebooks.zip">eBooks</a> (unzip that). Those get used in a lot of the demos I do, so I have the lab setup scripts copy over some script modules.<br>
In a folder called Help, I have a file called Help.zip. This contains everything downloaded by the Save-Help command in PowerShell. The Setup script unzips this into the VM and then runs Update-Help against it, so the VM doesn&rsquo;t need to be Internet-connected.<br>
In a folder called Hotfix, I have the Windows8.1-KB2883200-x64.msu hot fix installer. I include the 32-bit version also, just in case, but my script doesn&rsquo;t use it.<br>
In a folder called Installers, I have installers for PrimalScript, PowerShell Studio, and SQL Server Express with Advanced Services. Again, those get used a lot in my classes, but the setup script doesn&rsquo;t rely on them.<br>
Finally, in a folder called sxs, I have the contents of the Windows 8.1 installation media&rsquo;s \Sources\sxs folder. Some of the things my setup script does - like adding .NET Framework 3.5 so SQL Server 2012 will work - rely on features that aren&rsquo;t in a Win8.1 VM, normally. Because I don&rsquo;t want to rely on the Internet, I include this source so I can install new features from it.<br>
This is all pretty specific to the way I run classes, but if there&rsquo;s any use you can make of it, feel free.</p>
]]></content:encoded></item><item><title>Building Desired State Configuration Custom Resources</title><link>https://powershell.org/articles/2014-03-13-building-desired-state-configuration-custom-resources/</link><guid>https://powershell.org/articles/2014-03-13-building-desired-state-configuration-custom-resources/</guid><pubDate>Fri, 14 Mar 2014 03:07:14 +0000</pubDate><description>&lt;p&gt;Now that we&amp;rsquo;ve suitably rested, let&amp;rsquo;s get back to working with Desired State Configuration.  Now, there are some basic features to work with that ship by default and the &lt;a href="http://blogs.msdn.com/b/powershell/archive/2013/12/26/holiday-gift-desired-state-configuration-dsc-resource-kit-wave-1.aspx"&gt;PowerShell team has been blogging some additional resources&lt;/a&gt;, but in order to do some really interesting thing with DSC, we&amp;rsquo;ll need to create our own resources.&lt;/p&gt;
&lt;h2 id="the-high-points" class="ps-heading"&gt;The High Points&lt;a class="ps-heading-anchor" href="#the-high-points" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/"&gt;Overview &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/"&gt;Configuring the Pull Server (REST version)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Creating Configurations (&lt;a href="https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/"&gt;one of two&lt;/a&gt;, &lt;a href="https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/"&gt;two of two&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/"&gt;Configuring Clients&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Building Custom Resources (this post)&lt;/li&gt;
&lt;li&gt;Packaging Custom Resources&lt;/li&gt;
&lt;li&gt;Advanced Client Targeting&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-dsc-resource-structure" class="ps-heading"&gt;The DSC Resource Structure&lt;a class="ps-heading-anchor" href="#the-dsc-resource-structure" aria-label="Link to this section" title="Link to this section"&gt;&lt;i class="fas fa-link" aria-hidden="true"&gt;&lt;/i&gt;&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;DSC resources are (at their most basic) a PowerShell module.  These modules are augmented by a schema.mof file (we&amp;rsquo;ll get into that more in a minute or two).  These modules expose three main functions, Get-TargetResource, Set-TargetResource, and Test-TargetResource.  All three functions should share the same set of parameters.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Now that we&rsquo;ve suitably rested, let&rsquo;s get back to working with Desired State Configuration.  Now, there are some basic features to work with that ship by default and the<a href="http://blogs.msdn.com/b/powershell/archive/2013/12/26/holiday-gift-desired-state-configuration-dsc-resource-kit-wave-1.aspx">PowerShell team has been blogging some additional resources</a>, but in order to do some really interesting thing with DSC, we&rsquo;ll need to create our own resources.</p><h2 id="the-high-points" class="ps-heading">The High Points<a class="ps-heading-anchor" href="#the-high-points" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><ul><li><a href="https://powershell.org/2013/10/02/building-a-desired-state-configuration-infrastructure/">Overview </a></li><li><a href="https://powershell.org/2013/10/03/building-a-desired-state-configuration-pull-server/">Configuring the Pull Server (REST version)</a></li><li>Creating Configurations (<a href="https://powershell.org/2013/10/08/building-a-desired-state-configuration-configuration/">one of two</a>, <a href="https://powershell.org/2013/10/14/building-a-desired-state-configuration-configuration-part-2/">two of two</a>)</li><li><a href="https://powershell.org/2013/11/06/configuring-a-desired-state-configuration-client/">Configuring Clients</a></li><li>Building Custom Resources (this post)</li><li>Packaging Custom Resources</li><li>Advanced Client Targeting</li></ul><h2 id="the-dsc-resource-structure" class="ps-heading">The DSC Resource Structure<a class="ps-heading-anchor" href="#the-dsc-resource-structure" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h2><p>DSC resources are (at their most basic) a PowerShell module.  These modules are augmented by a schema.mof file (we&rsquo;ll get into that more in a minute or two).  These modules expose three main functions, Get-TargetResource, Set-TargetResource, and Test-TargetResource.  All three functions should share the same set of parameters.</p><h3 id="test-targetresource" class="ps-heading">Test-TargetResource<a class="ps-heading-anchor" href="#test-targetresource" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>Test-TargetResource validates whether your resource is currently in the desired state based on the parameters provided.  This function returns a boolean, $true if the resource is in the state described or $false if not.</p><h3 id="set-targetresource" class="ps-heading">Set-TargetResource<a class="ps-heading-anchor" href="#set-targetresource" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>Set-TargetResource is the workhorse in this module.  This is what will get things into the correct state.  The convention is to support one parameter called Ensure that can take two values, &ldquo;Present&rdquo; or &ldquo;Absent&rdquo; to describe whether or not a resource should be applied or removed as described.<br>
(Here&rsquo;s a little trick.. if you write break your Test-TargetResource into discrete functions, you can use those functions to only run the portions of Set-TargetResource that you need to!)</p><h3 id="get-targetresource" class="ps-heading">Get-TargetResource<a class="ps-heading-anchor" href="#get-targetresource" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>This is currently the least useful of the commands, but if experience has taught me anything, it&rsquo;ll likely have an a growing use case over time.<br>
Get-TargetResource returns the current state of the of the resource, returning a hash table of properties matching the parameters supplied to the command.</p><h3 id="exporting-commands" class="ps-heading">Exporting Commands<a class="ps-heading-anchor" href="#exporting-commands" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>This module should explicitly export these commands via either Export-ModuleMember or a module manifest.  If you don&rsquo;t, Import-DscResource will have trouble loading the resources when you try to generate a configuration (it&rsquo;s not a problem for running a configuration, just the generation part).</p><h3 id="the-managed-object-framework-mof-schema" class="ps-heading">The Managed Object Framework (MOF) Schema<a class="ps-heading-anchor" href="#the-managed-object-framework-mof-schema" aria-label="Link to this section" title="Link to this section"><i class="fas fa-link" aria-hidden="true"/></a></h3><p>The last piece of the DSC Resource is a schema file that maps the parameters for the command to a CIM class that can be registered in WMI.  This allows us to serialize the configuration parameters to a standards-based format and allows the Local Configuration Manager to marshal the parameters back to call the PowerShell functions for the phase that the LCM is in.  This file is named modulename.schema.mof.<br>
There is no real reason to write a schema.mof file by hand, both the<a href="https://github.com/PowerShellOrg/DSC/tree/master/Tooling/cDscResourceDesigner">DSC Resource Designer</a> and my<a href="https://github.com/PowerShellOrg/DSC/blob/master/Tooling/DscDevelopment/New-MofFile.ps1">New-MofFile</a> function can help generate that function.  The one key thing to be aware of in the schema.mof is that there is an attribute at the top of each of the MOF classes that denotes a friendly name, which is the identifier you will use in a configuration to specify a resource.</p><p><code>[ClassVersion("1.0.0"), FriendlyName("Pagefile")]</code>## How To Structure a Module With Resources</p><p>To get a good idea of the resource structure, we can look at<a href="https://github.com/PowerShellOrg/DSC/tree/master/Resources/StackExchangeResources">the StackExchangeResources module in the PowerShell.Org GitHub repository</a>.  There is a base module - StackExchangeResources, which has a module metadata file (required, you&rsquo;ll see why in a minute).  In that module, we need a folder DSCResources.  Our custom resource will be placed under that folder.<br>
The reason we need a module metadata file for the base module, is when resources from that module are used in a configuration, the generated configuration MOF files will reference the version of the base module (and that specific version is required on the node where the resource will be applied).<br>
Next up, we&rsquo;ll talk about how we package our resources to be distributed by a pull server.</p>
]]></content:encoded></item><item><title>PhillyPoSH 03/06/2014 meeting summary and presentation materials</title><link>https://powershell.org/articles/2014-03-13-phillyposh-03062014-meeting-summary-and-presentation-materials/</link><guid>https://powershell.org/articles/2014-03-13-phillyposh-03062014-meeting-summary-and-presentation-materials/</guid><pubDate>Fri, 14 Mar 2014 01:57:16 +0000</pubDate><description>&lt;ul&gt;
&lt;li&gt;&lt;a href="https://twitter.com/bielawb"&gt;Bartek Bielawski&lt;/a&gt; gave a presentation entitled &amp;ldquo;OMI : PowerShell Everywhere&amp;rdquo;. During his talk Bartek discussed and gave examples of how to CIM cmdlets and CDXML commands to manage everything in your datacenter. A &lt;a href="https://github.com/PhillyPoSH/2014-03"&gt;copy of his presentation materials&lt;/a&gt; are available on our &lt;a href="https://github.com/PhillyPoSH"&gt;GitHub Repository&lt;/a&gt;.
&lt;ul&gt;
&lt;li&gt;We then had a script club where various members presented scripts they were working on&lt;/li&gt;
&lt;li&gt;A &lt;a href="https://www.youtube.com/watch?v=Aw-rnpOk94Q"&gt;recording of this meeting&lt;/a&gt; has been posted to our &lt;a href="http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg"&gt;YouTube channel&lt;/a&gt;; please note that there are some audio issues near the end of the recording.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><content:encoded>&lt;![CDATA[<ul><li><a href="https://twitter.com/bielawb">Bartek Bielawski</a> gave a presentation entitled &ldquo;OMI : PowerShell Everywhere&rdquo;. During his talk Bartek discussed and gave examples of how to CIM cmdlets and CDXML commands to manage everything in your datacenter. A<a href="https://github.com/PhillyPoSH/2014-03">copy of his presentation materials</a> are available on our<a href="https://github.com/PhillyPoSH">GitHub Repository</a>.<ul><li>We then had a script club where various members presented scripts they were working on</li><li>A<a href="https://www.youtube.com/watch?v=Aw-rnpOk94Q">recording of this meeting</a> has been posted to our<a href="http://www.youtube.com/channel/UCAc_ow5FIJtRpvew__9Iqzg">YouTube channel</a>; please note that there are some audio issues near the end of the recording.</li></ul></li></ul>
]]></content:encoded></item><item><title>The DSC Conversation Continues</title><link>https://powershell.org/articles/2014-03-05-the-dsc-conversation-continues/</link><guid>https://powershell.org/articles/2014-03-05-the-dsc-conversation-continues/</guid><pubDate>Wed, 05 Mar 2014 18:58:37 +0000</pubDate><description>&lt;p&gt;Some &lt;a href="http://www.reddit.com/r/sysadmin/comments/1ziudp/desired_state_configuration_dsc_musthave_or_just/"&gt;lovely conversation on DSC over on Reddit&amp;hellip;&lt;/a&gt; with some I wanted to perhaps offer an opinion on. From what I&amp;rsquo;ve seen, these are very common sentiments, and they definitely deserve&amp;hellip; not argument or disagreement, but perhaps an alternate viewpoint. I&amp;rsquo;m not suggesting the commenters are wrong - but that maybe they&amp;rsquo;re not considering the entire picture.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Certainly if you work with a superset of MS OSs (i.e. you do Linux also), then Puppet or something like it seems like a no brainer. In fact, that is what we&amp;rsquo;re doing now. Puppet has powershell modules you can install for instance. Personally, I still feel like Powershell is overrated except for small snippets of that&amp;rsquo;s how something is exposed. Puppet can run powershell commands. AutoIT can run powershell commands&amp;hellip; I just don&amp;rsquo;t see value in Powershell today.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Some<a href="http://www.reddit.com/r/sysadmin/comments/1ziudp/desired_state_configuration_dsc_musthave_or_just/">lovely conversation on DSC over on Reddit&hellip;</a> with some I wanted to perhaps offer an opinion on. From what I&rsquo;ve seen, these are very common sentiments, and they definitely deserve&hellip; not argument or disagreement, but perhaps an alternate viewpoint. I&rsquo;m not suggesting the commenters are wrong - but that maybe they&rsquo;re not considering the entire picture.</p><blockquote><p>Certainly if you work with a superset of MS OSs (i.e. you do Linux also), then Puppet or something like it seems like a no brainer. In fact, that is what we&rsquo;re doing now. Puppet has powershell modules you can install for instance. Personally, I still feel like Powershell is overrated except for small snippets of that&rsquo;s how something is exposed. Puppet can run powershell commands. AutoIT can run powershell commands&hellip; I just don&rsquo;t see value in Powershell today.</p></blockquote><p>The point is that, until PowerShell, there were no PowerShell commands. Microsoft was incredibly inconsistent about providing automation-friendly commands of any kind. They could have gone down the path of building command-line tools for Cmd.exe; they didn&rsquo;t. The point of PowerShell is that Microsoft forced themselves to build commands. Now, if you run those from AutoIt, or Puppet, or whatever else - that&rsquo;s cool. PowerShell is an API, not a tool. Whatever tool you use to access that API is just dandy. Without the API, the tools are useless.</p><blockquote><p>As to DSC - I&rsquo;m really confused. Why is this separate from Group Policy again? Why is it better? Or is MS giving up on Group Policy as needing a total re-write?</p></blockquote><p>The advantage of Group Policy over DSC, today, is that GP has richer ability to target computers based on OU membership, WMI criteria, etc. Today, DSC targeting isn&rsquo;t that flexible. On the other hand, GP is extremely difficult to extend, since client extensions are native code. GP was built to manage the registry, although it&rsquo;s been extended to do more. DSC is built to do whatever PowerShell (and, via CIM, native code) can touch. My opinion? Yeah, DSC will obviate GP over time. Not instantly.</p><blockquote><p>Specifically, as I&rsquo;ve been rolling out Puppet across Windows and Linux, I see that in some ways, it brings the computer GPO aspect to Linux, and duplicates it a bit on Windows.<br>
Anyway, I won&rsquo;t be surprised to see someone start writing DSC modules in Puppet, because you&rsquo;ll want your config management to work across your platforms. And MS is kind of late to the game here - many many people have lots of knowledge already in Puppet, Chef etc&hellip;</p></blockquote><p>The guys on the PowerShell team love Chef and Puppet. I think you&rsquo;re confusing &ldquo;api&rdquo; and &ldquo;tool.&rdquo; There are two pieces to DSC: Piece one is the ability of PowerShell to read a configuration script and produce a MOF. Piece two is the ability of a Windows computer to receive that MOF and reconfigure itself accordingly. Any tool can do piece one. Use Puppet to produce the MOF. Use Puppet to control which MOFs get sent where. That&rsquo;s the _intent. _But Microsoft takes a big burden off the Puppet developers by having Windows _know what to do with the MOF. _Yeah, MS is late to the game. No question. But they&rsquo;re <em>joining</em> the game, not reinventing it. What they&rsquo;re doing works with what everyone else is already doing.</p><blockquote><p>I would personally carry the sentiment even further and say that investing the bulk of your effort in DSC over something like Puppet would be needlessly tying your own hands. Why focus on something that&rsquo;s platform specific when there is a good cross-platform alternative. Don&rsquo;t put all your eggs in one basket as it were.</p></blockquote><p>Wrong. It isn&rsquo;t an either-or thing. DSC&rsquo;s introduction at TechEd 2013 included a demo of Puppet (or was it Chef?) being used to send configurations to Windows - much more easily, because with DSC, Windows natively knew what to do with them. If you&rsquo;ve<em>got</em> tooling like Puppet, _use it. _DSC is just making Windows work better with it. The whole <em>point</em> of DSC is that it plays the cross-platform game <em>everyone else has already been playing. _<br>
Purely on the Windows side, the need to focus on DSC is more about developing the DSC <em>resources</em> you need, so that you can send a MOF (from Puppet, say) to a Windows computer, and that Windows computer will know how to configure everything <em>you</em> need configured. Microsoft will continue to produce resources for core OS and server application stuff; any LOB stuff is what you&rsquo;d be focusing on.<br>
Heck, even in a pure-Windows environment, with cross-platform off the table, Puppet provides <em>tooling</em></em> _that DSC does not. You&rsquo;re going to need those tools, whether it&rsquo;s Puppet, some future System Center thing, or whatever. DSC is a mid-level API, not a tool.</p><blockquote><p>Configuration managment does seem to be the future &ndash; I just don&rsquo;t agree completely with the author&rsquo;s point of a view that it will have to be DSC.</p></blockquote><p>On Windows, DSC will be the underlying API that your configuration management tool talks to. DSC isn&rsquo;t a configuration management tool. DSC bridges the gap between a text-based MOF and the bajillion proprietary protocols MS uses internally in their products. Remember, on Linux, it&rsquo;s easier - everything already lives in a text file of some kind, right (oversimplifying, I know, but still)? In Windows, config information lives <em>everyplace</em>; DSC&rsquo;s main job is to bridge the gap. DSC doesn&rsquo;t provide <em>management</em> of what configuration goes where; it just provides the implementation mechanism. In PowerShell, there&rsquo;s a primitive ability to write configurations, because MS has to give you something, but yeah&hellip; I think most organizations would benefit from good tooling atop that.<br>
I think this entire discussion is why more people need to start<strong>learning</strong> (not necessarily using) DSC if you have Windows in your environment. Find out what it is, what it isn&rsquo;t, and how it&rsquo;ll play into the other efforts you&rsquo;ve got underway. There&rsquo;s a ton of misconception about what it is and where it&rsquo;s meant to fit in. When I say, &ldquo;if you&rsquo;re not learning DSC, you&rsquo;re screwed,&rdquo; I don&rsquo;t mean, &ldquo;if you&rsquo;re not <em>using</em> DSC.&rdquo; I mean _learning. _Because if you&rsquo;re not _learning _it, you&rsquo;re going to be subject to the same misconceptions about it. You end up spending a lot of time reinventing what it&rsquo;s willing to do - and what it&rsquo;s willing to do <em>in conjunction with</em> your existing tools.</p>
]]></content:encoded></item><item><title>Jobs: PowerShell Scripter Wanted</title><link>https://powershell.org/articles/2014-03-05-jobs-powershell-scripter-wanted/</link><guid>https://powershell.org/articles/2014-03-05-jobs-powershell-scripter-wanted/</guid><pubDate>Wed, 05 Mar 2014 14:47:19 +0000</pubDate><description>&lt;p&gt;Told you this would eventually start happening ;). Matt Sullivan of Strategic Staffing contacted me with the following job posting; if you&amp;rsquo;re interested, reply to him directly at 781-347-5220.&lt;br&gt;
&amp;hellip;&lt;br&gt;
My name is Matt Sullivan and I am a member of the Strategic Staffing Division at NTT DATA Inc., the sixth largest global IT integrator. We have more than 75,000 employees worldwide, offices in 40 different countires, and we are owned by Nippon Telegraph and Telephone, the largest telecommunications company in the world.&lt;br&gt;
I am currently seeking a Scripting Engineer - PowerShell to join our team in Burlington, VT. The job description can be found below for your review. Please note that your resume will not be submitted to the client until we have discussed your background.&lt;br&gt;
Title: PowerShell Scripter&lt;br&gt;
Location: Burlington, VT&lt;br&gt;
Duration: 1 year&lt;br&gt;
Our Client has a number of projects in flight that require scripting (PowerShell) as part of their automation solution in our Windows environment. This position would require that the contractor meet with other project members, to gather requirements, build, test and document the scripts. He/she will then hand this work off to another vendor to be implemented on the scheduling platform (BMC&amp;rsquo;s Control-M, a SaaS hosted by Client).&lt;br&gt;
As a second priority, the contractor will work with various departments, to examine an existing body of scripts/jobs which also in our Windows environment. These jobs, having been prioritized by the client, will be converted, if necessary, to PowerShell, tested and documented before being turned over to Client. This body of work is not expected to be completed in the time allotted as it is very large. Our goal is to address as many as possible working from the highest priority down.&lt;br&gt;
PowerShell is the scripting language of choice. A few years at a minimum is required including experience with .NET remoting.&lt;br&gt;
Expert level in Powershell&lt;br&gt;
3+ years experience&lt;br&gt;
Powershell V2 and/or V3&lt;br&gt;
Solid understanding of Powershell Remoting&lt;br&gt;
Business Analyst skills&lt;br&gt;
Experience in requirements gathering&lt;br&gt;
Testing methodologies, test plan development&lt;br&gt;
Strong documentation skills&lt;br&gt;
We are dedicated to working with a wide range of IT consultants, as an example corp to corp and W-2 hourly contractors; and we offer competitive benefits for candidates applying as W-2 contractors.&lt;br&gt;
Benefits available for W-2 contractors only:&lt;br&gt;
Medical&lt;br&gt;
Dental&lt;br&gt;
Vision&lt;br&gt;
Caremark Prescription&lt;br&gt;
401(k)&lt;br&gt;
W-2 Employee Assistance Program&lt;br&gt;
Accident Insurance- Workers’ Compensation Insurance and Business Travel Insurance&lt;br&gt;
COBRA&lt;br&gt;
Healthcare Reimbursement Account Programs&lt;br&gt;
Credit Union&lt;br&gt;
Corporate Mortgage Program&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Told you this would eventually start happening ;). Matt Sullivan of Strategic Staffing contacted me with the following job posting; if you&rsquo;re interested, reply to him directly at 781-347-5220.<br>
&hellip;<br>
My name is Matt Sullivan and I am a member of the Strategic Staffing Division at NTT DATA Inc., the sixth largest global IT integrator. We have more than 75,000 employees worldwide, offices in 40 different countires, and we are owned by Nippon Telegraph and Telephone, the largest telecommunications company in the world.<br>
I am currently seeking a Scripting Engineer - PowerShell to join our team in Burlington, VT. The job description can be found below for your review. Please note that your resume will not be submitted to the client until we have discussed your background.<br>
Title: PowerShell Scripter<br>
Location: Burlington, VT<br>
Duration: 1 year<br>
Our Client has a number of projects in flight that require scripting (PowerShell) as part of their automation solution in our Windows environment. This position would require that the contractor meet with other project members, to gather requirements, build, test and document the scripts. He/she will then hand this work off to another vendor to be implemented on the scheduling platform (BMC&rsquo;s Control-M, a SaaS hosted by Client).<br>
As a second priority, the contractor will work with various departments, to examine an existing body of scripts/jobs which also in our Windows environment. These jobs, having been prioritized by the client, will be converted, if necessary, to PowerShell, tested and documented before being turned over to Client. This body of work is not expected to be completed in the time allotted as it is very large. Our goal is to address as many as possible working from the highest priority down.<br>
PowerShell is the scripting language of choice. A few years at a minimum is required including experience with .NET remoting.<br>
Expert level in Powershell<br>
3+ years experience<br>
Powershell V2 and/or V3<br>
Solid understanding of Powershell Remoting<br>
Business Analyst skills<br>
Experience in requirements gathering<br>
Testing methodologies, test plan development<br>
Strong documentation skills<br>
We are dedicated to working with a wide range of IT consultants, as an example corp to corp and W-2 hourly contractors; and we offer competitive benefits for candidates applying as W-2 contractors.<br>
Benefits available for W-2 contractors only:<br>
Medical<br>
Dental<br>
Vision<br>
Caremark Prescription<br>
401(k)<br>
W-2 Employee Assistance Program<br>
Accident Insurance- Workers’ Compensation Insurance and Business Travel Insurance<br>
COBRA<br>
Healthcare Reimbursement Account Programs<br>
Credit Union<br>
Corporate Mortgage Program</p>
]]></content:encoded></item><item><title>The DSC Opportunity for ISVs</title><link>https://powershell.org/articles/2014-03-04-the-dsc-opportunity-for-isvs/</link><guid>https://powershell.org/articles/2014-03-04-the-dsc-opportunity-for-isvs/</guid><pubDate>Tue, 04 Mar 2014 23:45:02 +0000</pubDate><description>&lt;p&gt;Desired State Configuration offers a number of immediate opportunities for independent software vendors (ISVs) who are smart enough to jump on board _now. _DSC currently suffers from a marked lack of tooling. That&amp;rsquo;s partially deliberate; MS obviously needs to deliver the functionality, and they may well rely on third parties or the System Center team to build tools on top of that functionality. But let&amp;rsquo;s explore some of the immediate opportunities.&lt;br&gt;
&lt;strong&gt;Change Control and Versioning&lt;/strong&gt;. This should be pretty easy. We basically need a way to &amp;ldquo;check in&amp;rdquo; a new DSC configuration, possibly have it go through an approvals workflow, and then deploy it. In more detail, I&amp;rsquo;d want to be able to submit a configuration script to this tool. It would run the config, generate a MOF, and deploy it to a &amp;ldquo;lab&amp;rdquo; pull server location. I could then verify its functionality, and &amp;ldquo;approve&amp;rdquo; it to deploy the MOF to a production pull server. Deployment would include creating the necessary checksum file. Obviously, rollback capability to a previous version would be nice.**&lt;br&gt;
**&lt;br&gt;
**Configuration Consolidation. **Natively, DSC requires me to specify the nodes I want to push a configuration too. I&amp;rsquo;d like to see a tool that lets me create server lists somewhat graphically, organizing things so that a single server might appear in a &amp;ldquo;domain controllers&amp;rdquo; list, a &amp;ldquo;New York servers&amp;rdquo; list, and a &amp;ldquo;Win2012R2&amp;rdquo; list.  I could target configurations at each list, and the tool would combine those configurations to create the appropriate one for each node based on its &amp;ldquo;folder memberships.&amp;rdquo; That might be done through composite resources. This makes DSC work a bit like GPO, with this tool doing the work of combining configurations into a single one per node.&lt;br&gt;
**DSC Studio. **Using the underlying DSC Resource Kit and Resource Designer for functionality, give me an IDE that lets me graphically design a resource (specify properties) and then spit out the schema MOF and skeleton PSM1 file. This could probably be a very simple PowerShell ISE add-on, in fact.&lt;br&gt;
**Node management. **In a pull server environment, give me a tool that lets me group servers. The tool should modify the LCM on each group, so that each member of the group has the same DSC configuration ID. That way, they&amp;rsquo;re all pulling the correct MOF from the pull server. Otherwise, managing GUIDs gets out of hand pretty quickly - I can see a lot of Excel spreadsheets.&lt;br&gt;
&lt;strong&gt;Resources&lt;/strong&gt;. There are obviously a ton of resources to be written. This might be a bit of a bad call for an ISV, as you never know what MS is going to release resources for. Now that MS has built so many PowerShell cmdlets, building resources on top of them gets pretty straightforward. They&amp;rsquo;ve pumped out two waves of resources pretty fast already.&lt;br&gt;
In short, I think there&amp;rsquo;s a big opportunity for a smart company. It&amp;rsquo;s a matter of seeing the &amp;ldquo;holes&amp;rdquo; in the technology, which currently focus mainly on management, and filling them in.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Desired State Configuration offers a number of immediate opportunities for independent software vendors (ISVs) who are smart enough to jump on board _now. _DSC currently suffers from a marked lack of tooling. That&rsquo;s partially deliberate; MS obviously needs to deliver the functionality, and they may well rely on third parties or the System Center team to build tools on top of that functionality. But let&rsquo;s explore some of the immediate opportunities.<br><strong>Change Control and Versioning</strong>. This should be pretty easy. We basically need a way to &ldquo;check in&rdquo; a new DSC configuration, possibly have it go through an approvals workflow, and then deploy it. In more detail, I&rsquo;d want to be able to submit a configuration script to this tool. It would run the config, generate a MOF, and deploy it to a &ldquo;lab&rdquo; pull server location. I could then verify its functionality, and &ldquo;approve&rdquo; it to deploy the MOF to a production pull server. Deployment would include creating the necessary checksum file. Obviously, rollback capability to a previous version would be nice.**<br>
**<br>
**Configuration Consolidation. **Natively, DSC requires me to specify the nodes I want to push a configuration too. I&rsquo;d like to see a tool that lets me create server lists somewhat graphically, organizing things so that a single server might appear in a &ldquo;domain controllers&rdquo; list, a &ldquo;New York servers&rdquo; list, and a &ldquo;Win2012R2&rdquo; list.  I could target configurations at each list, and the tool would combine those configurations to create the appropriate one for each node based on its &ldquo;folder memberships.&rdquo; That might be done through composite resources. This makes DSC work a bit like GPO, with this tool doing the work of combining configurations into a single one per node.<br>
**DSC Studio. **Using the underlying DSC Resource Kit and Resource Designer for functionality, give me an IDE that lets me graphically design a resource (specify properties) and then spit out the schema MOF and skeleton PSM1 file. This could probably be a very simple PowerShell ISE add-on, in fact.<br>
**Node management. **In a pull server environment, give me a tool that lets me group servers. The tool should modify the LCM on each group, so that each member of the group has the same DSC configuration ID. That way, they&rsquo;re all pulling the correct MOF from the pull server. Otherwise, managing GUIDs gets out of hand pretty quickly - I can see a lot of Excel spreadsheets.<br><strong>Resources</strong>. There are obviously a ton of resources to be written. This might be a bit of a bad call for an ISV, as you never know what MS is going to release resources for. Now that MS has built so many PowerShell cmdlets, building resources on top of them gets pretty straightforward. They&rsquo;ve pumped out two waves of resources pretty fast already.<br>
In short, I think there&rsquo;s a big opportunity for a smart company. It&rsquo;s a matter of seeing the &ldquo;holes&rdquo; in the technology, which currently focus mainly on management, and filling them in.</p>
]]></content:encoded></item><item><title>Charlotte PowerShell User Group Meeting cancelled this week 3/6/14</title><link>https://powershell.org/articles/2014-03-03-charlotte-powershell-user-group-meeting-cancelled-this-week-3614/</link><guid>https://powershell.org/articles/2014-03-03-charlotte-powershell-user-group-meeting-cancelled-this-week-3614/</guid><pubDate>Tue, 04 Mar 2014 04:00:28 +0000</pubDate><description>&lt;p&gt;Sorry but we have to cancel the User group meeting this month in Charlotte on 3/6/14 we will meet again on April 3, 2014.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Sorry but we have to cancel the User group meeting this month in Charlotte on 3/6/14 we will meet again on April 3, 2014.</p>
]]></content:encoded></item></channel></rss>