&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 September 2017 on PowerShell.org - Welcome Automaters!</title><link>https://powershell.org/articles/2017/09/</link><description>Recent content in Articles from September 2017 on PowerShell.org - Welcome Automaters!</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://powershell.org/articles/2017/09/index.xml" rel="self" type="application/rss+xml"/><item><title>Call for topics closing 1 October</title><link>https://powershell.org/articles/2017-09-30-call-for-topics-closing-1-october/</link><guid>https://powershell.org/articles/2017-09-30-call-for-topics-closing-1-october/</guid><pubDate>Sat, 30 Sep 2017 15:22:45 +0000</pubDate><description>&lt;p&gt;The call for topics is closing 1 October at 23:59 GMT. We’ve had a fantastic set of submissions. Creating an agenda for the 2018 Summit is going to be very difficult because we’ve had so many fantastic sessions submitted and I don’t have enough slots to take them all.&lt;/p&gt;
&lt;p&gt;The call for topics is hosted by papercall.io – highly recommended – and the cut off is automatic.&lt;/p&gt;
&lt;p&gt;I WILL NOT ACCEPT ANY SESSIONS SUBMITTED AFTER THE CUT OFF DATE.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>The call for topics is closing 1 October at 23:59 GMT. We’ve had a fantastic set of submissions. Creating an agenda for the 2018 Summit is going to be very difficult because we’ve had so many fantastic sessions submitted and I don’t have enough slots to take them all.</p><p>The call for topics is hosted by papercall.io – highly recommended – and the cut off is automatic.</p><p>I WILL NOT ACCEPT ANY SESSIONS SUBMITTED AFTER THE CUT OFF DATE.</p>
]]></content:encoded></item><item><title>Using Azure Desired State Configuration – Part II</title><link>https://powershell.org/articles/2017-09-26-using-azure-desired-state-configuration-part-ii/</link><guid>https://powershell.org/articles/2017-09-26-using-azure-desired-state-configuration-part-ii/</guid><pubDate>Tue, 26 Sep 2017 14:00:21 +0000</pubDate><description>&lt;p&gt;Today we&amp;rsquo;re going to be talking about adding configurations to your Azure Automation Account.  In this article, we&amp;rsquo;ll be discussing special considerations that we need to take into account when uploading our configurations.  Then we&amp;rsquo;ll talk about compiling the configurations into Managed Object Format (.mof) files, which we&amp;rsquo;ll be able to use to assign to our systems.&lt;br&gt;
&lt;strong&gt;Things to Consider&lt;/strong&gt;&lt;br&gt;
When building configurations for Azure DSC (or anything where we are pulling pre-created .mof files from), there are some things that we need to keep in mind.&lt;br&gt;
&lt;em&gt;Don&amp;rsquo;t embed PowerShell scripts in your configurations.&lt;/em&gt; - I spent a lot of time cleaning up my own configurations when learning Azure Automation DSC.  When configurations are compiled, they&amp;rsquo;re done so on a virtual machine hidden under the covers and can cause some unexpected behaviours.  Some of the issues that I ran into were:&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Today we&rsquo;re going to be talking about adding configurations to your Azure Automation Account.  In this article, we&rsquo;ll be discussing special considerations that we need to take into account when uploading our configurations.  Then we&rsquo;ll talk about compiling the configurations into Managed Object Format (.mof) files, which we&rsquo;ll be able to use to assign to our systems.<br><strong>Things to Consider</strong><br>
When building configurations for Azure DSC (or anything where we are pulling pre-created .mof files from), there are some things that we need to keep in mind.<br><em>Don&rsquo;t embed PowerShell scripts in your configurations.</em> - I spent a lot of time cleaning up my own configurations when learning Azure Automation DSC.  When configurations are compiled, they&rsquo;re done so on a virtual machine hidden under the covers and can cause some unexpected behaviours.  Some of the issues that I ran into were:</p><ul><li>Using environment variables like $env:COMPUTERNAME - This actually caused me a lot of headaches when I started building systems that were being joined to a domain.  The name of the instance that<em>compiles</em> the .mof will be used for $env:COMPUTERNAME instead of the target computer name and you&rsquo;ll be banging your head on the table wondering what happened.  Some of the resources that have been published in the gallery have been updated to use a &rsquo;localhost&rsquo; option as a computer name input, such as xActiveDirectory.  This takes care of a lot of those headaches.</li><li>Using Parenthetical Commands to establish values - Using something like Get-NetAdapter in a parenthetical argument to get a network adapter of your target system and pass the needed values on to your DSC Resource Providers won&rsquo;t work for the same reasons as above.  In this instance, I received a vague error indicating that I was passing an invalid property, and took a little bit of time before I understood what was going on.</li><li>I also ran into an issue with compiling a configuration because I had been using Set-Item to configure the WSMan maxEnvelopeSize in my configs because they can get really big.  The error that I received was that WSMan wasn&rsquo;t installed on the machine.  It took me a bit to realize that this was because the machine compiling the .mof didn&rsquo;t have WSMan running on the box and it was blowing up on the config.</li></ul><p>Instead, if you need to run PowerShell scripts ahead of your deployment, you can use the custom script extension to perform those tasks in Azure, or just put the script into your image on-prem.  There is one exception to this, and that&rsquo;s what we&rsquo;ll be talking about next.<br><em>Leverage Azure Automation Credential storage where possible</em> - Passing credentials in as a parameter can cause all kinds of issues.</p><ul><li>First and foremost, anyone that is building or deploying those configurations will know those credentials.</li><li>Second of all, it brings the possibility of someone tripping over the keyboard and entering a credential in improperly.</li></ul><p>Allowing Azure Automation to tap the credential store during .mof compilation allows to credentials to stay in a secured bubble through the entire process.  To pass a credential from Azure Automation to your config, you need to modify the configuration.  Simply call Get-AutomationPSCredential to a variable inside your configuration, and then set that variable wherever those credentials are required.  Like so:</p><p><code>$AdminCreds = Get-AutomationPSCredential -Name $AdminName Node ($AllNodes.Where{$_.Role -eq "WebServer"}).NodeName { JoinDomain DomainJoin { DependsOn = "[WindowsFeature]RemoveUI" DomainName = $DomainName Admincreds = $Admincreds RetryCount = 20 RetryIntervalSec = 60 } }</code>Azure Automation under the covers will authenticate to the Credentials store with the RunAs account, and then pass those credentials as PSCredential to your DSC resource provider.<br><em>Stop Using localhost (or a specific computer name) as the Node Name</em> - Azure Automation DSC allows you to use genericized, but meaningful names to configurations instead of just assigning things to localhost.  So now you can use webServer, or domainController, or something that describes the role instead of a machine name.  This makes it much easier to decide which configuration should go to what machine.<br><img src="https://powershell.org/wp-content/uploads/2017/09/roles-267x300.jpg" alt=""><br><strong>Upload The Configuration</strong><br>
So much like in my previous series on Azure Automation and OMS, we&rsquo;re going to upload our DSC resources to our Automation Account&rsquo;s modules directory.  This requires getting the automation account, zipping up our local module files, sending them to a blob store, and importing those modules from the blob store.  I&rsquo;ve sectioned out the code into different regions to better break it down for your own purposes.</p><p><code>#region GetAutomationAccount $AutoResGrp = Get-AzureRmResourceGroup -Name 'mms-eus' $AutoAcct = Get-AzureRmAutomationAccount -ResourceGroupName $AutoResGrp.ResourceGroupName #endregion #region compress configurations Set-Location C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload $Modules = Get-ChildItem -Directory ForEach ($Mod in $Modules){ Compress-Archive -Path $Mod.PSPath -DestinationPath ((Get-Location).Path + '\' + $Mod.Name + '.zip') -Force } #endregion #region Access blob container $StorAcct = Get-AzureRmStorageAccount -ResourceGroupName $AutoAcct.ResourceGroupName Add-AzureAccount $AzureSubscription = ((Get-AzureSubscription).where({$PSItem.SubscriptionName -eq $Sub.Name})) Select-AzureSubscription -SubscriptionName $AzureSubscription.SubscriptionName -Current $StorKey = (Get-AzureRmStorageAccountKey -ResourceGroupName $StorAcct.ResourceGroupName -Name $StorAcct.StorageAccountName).where({$PSItem.KeyName -eq 'key1'}) $StorContext = New-AzureStorageContext -StorageAccountName $StorAcct.StorageAccountName -StorageAccountKey $StorKey.Value $Container = Get-AzureStorageContainer -Name ('modules') -Context $StorContext #endregion #region upload zip files $ModulesToUpload = Get-ChildItem -Filter "*.zip" ForEach ($Mod in $ModulesToUpload){ $Blob = Set-AzureStorageBlobContent -Context $StorContext -Container $Container.Name -File $Mod.FullName -Force New-AzureRmAutomationModule -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName -Name ($Mod.Name).Replace('.zip','') -ContentLink $Blob.ICloudBlob.Uri.AbsoluteUri } #endregion</code>Once we&rsquo;ve uploaded our files, we can monitor them to ensure that they&rsquo;ve imported successfully via the UI, or by using the Get-AzureRmAutomationModule command.<br><img src="https://powershell.org/wp-content/uploads/2017/09/ModuleImport-300x109.jpg" alt=""/><p><code>PS C:\Scripts\Presentations\AzureAutomationDSC\ResourcesToUpload&gt; Get-AzureRmAutomationModule -Name LWINConfigs -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountNa me ResourceGroupName : mms-eus AutomationAccountName : testautoaccteastus2 Name : LWINConfigs IsGlobal : False Version : 1.0.0.0 SizeInBytes : 5035 ActivityCount : 1 CreationTime : 9/13/2017 9:56:10 AM -04:00 LastModifiedTime : 9/13/2017 9:57:26 AM -04:00 ProvisioningState : Succeeded</code><strong>Compile the Configuration</strong><br>
Once we&rsquo;ve uploaded our modules, we can then upload and compile our configuration.  For this, we&rsquo;ll use the Import-AzureRmAutomationDscConfiguration command.  But before we do, there&rsquo;s two things to note when formatting a configuration for deployment to Azure Automation DSC.</p><ul><li>The configuration name has to match the name of the configuration file.  So if your configuration is called SqlServerConfig, your config file has to be called SqlServerConfig.ps1.</li><li>The sourcepath parameter errors out with an &lsquo;invalid argument specified&rsquo; error if you use a string path.  Instead, it works if you use (Get-Item).FullName</li></ul><p>We&rsquo;ll be casting this command to a variable, as we&rsquo;ll be using it later on when we compile the configuration.  You&rsquo;ll also want to use the publish parameter to publish the configuration after importation, and if you&rsquo;re overwriting a configuration you&rsquo;ll want to leverage the force parameter.</p><p><code>$Config = Import-AzureRmAutomationDscConfiguration -SourcePath (Get-Item C:\Scripts\Presentations\AzureAutomationDSC\TestConfig.ps1).FullName -AutomationAccountName $AutoAcct.AutomationAccountName -ResourceGroupName $AutoAcct.ResourceGroupName -Description DemoConfiguration -Published -Force</code><img src="https://powershell.org/wp-content/uploads/2017/09/ConfigPublished-300x97.jpg" alt=""><br>
Now that our configuration is published, we can compile it.  So let&rsquo;s add our parameters and configuration data:</p><p><code>$Parameters = @{ 'DomainName' = 'lwinerd.local' 'ResourceGroupName' = $AutoAcct.ResourceGroupName 'AutomationAccountName' = $AutoAcct.AutomationAccountName 'AdminName' = 'lwinadmin' } $ConfigData = @{ AllNodes = @( @{ NodeName = "*" PSDscAllowPlainTextPassword = $true }, @{ NodeName = "webServer" Role = "WebServer" } @{ NodeName = "domainController" Role = "domaincontroller" } ) }</code>You&rsquo;ll notice that I have PSDscAllowPlainTextPassword set to true for all of my nodes.  This is to allow the PowerShell instance on the compilation node to compile the configuration with credentials being passed into it.  This PowerShell instance isn&rsquo;t aware that once the .mof is compiled, it is encrypted by Azure Automation before it&rsquo;s stored in the Automation Account.<br>
Now that we have our parameters and configuration data set, we can pass this to our Start-AzureRmAutomationDscCompilationJob command to kick off the .mof compilation.</p><p><code>$DSCComp = Start-AzureRmAutomationDscCompilationJob -AutomationAccountName $AutoAcct.AutomationAccountName -ConfigurationName $Config.Name -ConfigurationData $ConfigData -Parameters $Parameters -ResourceGroupName $AutoAcct.ResourceGroupName</code>And now we can use the Get-AzureRmAutomationDscCompilationJob command to check the status of the compilation, or check through the UI.</p><p><code>Get-AzureRmAutomationDscCompilationJob -Id $DSCComp.Id -ResourceGroupName $AutoAcct.ResourceGroupName -AutomationAccountName $AutoAcct.AutomationAccountName</code>The compilation itself can take up to around five minutes, so grab yourself a cup of coffee.  Once it returns as complete, we can get to registering our endpoints and delivering our configurations to them.  Join us next week as we do just that!<br><img src="https://powershell.org/wp-content/uploads/2017/09/CompComplete-300x161.jpg" alt=""/>
]]></content:encoded></item><item><title>Using Azure Desired State Configuration – Part I</title><link>https://powershell.org/articles/2017-09-25-using-azure-desired-state-configuration-part-i/</link><guid>https://powershell.org/articles/2017-09-25-using-azure-desired-state-configuration-part-i/</guid><pubDate>Mon, 25 Sep 2017 14:00:45 +0000</pubDate><description>&lt;p&gt;I&amp;rsquo;ve been wanting to do this series for a while, and with some of the recent changes in Azure Automation DSC, I feel like we can now do a truly complete series.  So let&amp;rsquo;s get started!&lt;br&gt;
Compliance is hard as it is.  And as companies start moving more workloads into the cloud, they struggle with compliance even more so.  Many organizations are moving to Infrastructure-as-a-Service for a multitude of reasons (both good and bad).  As these workloads become more numerous, IT departments are struggling with keeping up with auditing and management needs.  Desired State Configuration, as we all know, can provide a path to not only configuring your environments as they deploy as new workloads, but can maintain compliancy, and give you rich reporting.&lt;br&gt;
Yes.  Rich reporting from Desired State Configuration, out of the box.  You read it right.  You can get rich graphical reporting out of Azure Automation Desired State Configuration out of the box.  And you can even use it on-prem!&lt;br&gt;
&lt;img src="https://powershell.org/wp-content/uploads/2017/08/Compliance-300x200.jpg" alt=""&gt;&lt;br&gt;
In this series, we&amp;rsquo;re going to be discussing the push and pull methods for Desired State Configuration in Azure.  We&amp;rsquo;ll be going over some of the &amp;lsquo;gotchas&amp;rsquo; that you have to keep in mind while deploying your configurations in the Azure environment.  And we&amp;rsquo;ll be talking about how we can use hybrid workers to manage systems on-prem using the same tools.&lt;br&gt;
&lt;strong&gt;Push vs. Pull&lt;/strong&gt;&lt;br&gt;
Desired State Configuration, like a datacenter implementation, can be handled via push or pull method.  Push method in Azure does not give you reporting, but allows you to deploy your configurations to a new or existing environment.  These configurations, and the modules necessary to perform the configuration, are stored in a private blob that you create, and then the Azure Desired State Configuration extension can be assigned that package.  It is then downloaded to the target machine, decompressed, modules installed, and the configuration .mof file generated locally on the system.&lt;br&gt;
Pull method fully uses the capabilities of the Azure Automation Account for storing modules, configurations, and .mof compilations to deploy to systems.  The target DSC nodes are registered and monitored through the Azure Automation Account and reporting is generated and made available through the UI.  This reporting can also be forwarded to &lt;a href="https://docs.microsoft.com/en-us/azure/automation/automation-dsc-diagnostics"&gt;OMS Log Analytics&lt;/a&gt; for dashboarding and alerting purposes (which, as we discussed in &lt;a href="https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/"&gt;my previous series&lt;/a&gt;, can be used with Azure Automation Runbooks for auto-remediation).&lt;br&gt;
&lt;strong&gt;Pros and Cons to Each&lt;/strong&gt;&lt;br&gt;
So let&amp;rsquo;s talk about some of the upsides and downsides to each method.  These may affect your decisions as you architect your DSC solution.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>I&rsquo;ve been wanting to do this series for a while, and with some of the recent changes in Azure Automation DSC, I feel like we can now do a truly complete series.  So let&rsquo;s get started!<br>
Compliance is hard as it is.  And as companies start moving more workloads into the cloud, they struggle with compliance even more so.  Many organizations are moving to Infrastructure-as-a-Service for a multitude of reasons (both good and bad).  As these workloads become more numerous, IT departments are struggling with keeping up with auditing and management needs.  Desired State Configuration, as we all know, can provide a path to not only configuring your environments as they deploy as new workloads, but can maintain compliancy, and give you rich reporting.<br>
Yes.  Rich reporting from Desired State Configuration, out of the box.  You read it right.  You can get rich graphical reporting out of Azure Automation Desired State Configuration out of the box.  And you can even use it on-prem!<br><img src="https://powershell.org/wp-content/uploads/2017/08/Compliance-300x200.jpg" alt=""><br>
In this series, we&rsquo;re going to be discussing the push and pull methods for Desired State Configuration in Azure.  We&rsquo;ll be going over some of the &lsquo;gotchas&rsquo; that you have to keep in mind while deploying your configurations in the Azure environment.  And we&rsquo;ll be talking about how we can use hybrid workers to manage systems on-prem using the same tools.<br><strong>Push vs. Pull</strong><br>
Desired State Configuration, like a datacenter implementation, can be handled via push or pull method.  Push method in Azure does not give you reporting, but allows you to deploy your configurations to a new or existing environment.  These configurations, and the modules necessary to perform the configuration, are stored in a private blob that you create, and then the Azure Desired State Configuration extension can be assigned that package.  It is then downloaded to the target machine, decompressed, modules installed, and the configuration .mof file generated locally on the system.<br>
Pull method fully uses the capabilities of the Azure Automation Account for storing modules, configurations, and .mof compilations to deploy to systems.  The target DSC nodes are registered and monitored through the Azure Automation Account and reporting is generated and made available through the UI.  This reporting can also be forwarded to<a href="https://docs.microsoft.com/en-us/azure/automation/automation-dsc-diagnostics">OMS Log Analytics</a> for dashboarding and alerting purposes (which, as we discussed in<a href="https://powershell.org/2017/07/25/using-powershell-azure-automation-and-oms-part-i/">my previous series</a>, can be used with Azure Automation Runbooks for auto-remediation).<br><strong>Pros and Cons to Each</strong><br>
So let&rsquo;s talk about some of the upsides and downsides to each method.  These may affect your decisions as you architect your DSC solution.</p><ul><li><em>Pricing</em> - Azure DSC is essentially free.  Azure Automation DSC is free for Azure nodes, while there is a cost associated with managed on-prem nodes.  This charged per month and is dependent on how often the machines are checking in.  You can get more information on the particulars<a href="https://azure.microsoft.com/en-us/pricing/details/automation/">here</a>.</li><li><em>Reporting</em> - If you&rsquo;re looking for rich reporting, Azure Automation DSC is definitely the way to go.  You can still get statuses from your Azure DSC nodes via PowerShell, but this leaves the onus on you to format that data and make it look pretty.  We&rsquo;ll be taking a look at how we can do this a bit later.</li><li><em>Flexibility</em> - Azure Automation DSC allows you to use modules stored in your Azure Automation Account.  If you wish to use a new module, you simply add that module, update your configuration file, and recompile.  With Azure DSC, you need to repackage your configuration with all of the modules, re-publish them, and re-push them to your target machines.</li><li><em>Side-by-Side Module Versioning Tolerance</em> - Currently, Azure DSC actually has an advantage over Azure Automation DSC in this respect.  You cannot currently have multiple module versions in your module repository.  So if you&rsquo;re using Automation DSC and calling the same DSC resources in multiple configs, they need to all be on that same module version.</li><li><em>On-Prem Management Capabilities</em> - Azure Automation DSC has the ability to manage on-prem virtual machines, either directly or via Hybrid Workers.  This gives you the ability to manage all of your virtual machines and monitor their configuration status from a single pane of glass.  Azure DSC does not have this capability.</li><li><em>Managing Systems in AWS</em> - Yes.  You can also manage your virtual machines in AWS using the AWS DSC Toolkit via Azure Automation DSC!</li></ul><p>So that&rsquo;s the overview of what we&rsquo;re going to be talking about through this series.  Tomorrow, we&rsquo;ll be getting into how to add configurations into Azure Automation DSC and compiling your configs.</p>
]]></content:encoded></item><item><title>The Future of PowerShell's Desired State Configuration</title><link>https://powershell.org/articles/2017-09-13-the-future-of-powershells-desired-state-configuration/</link><guid>https://powershell.org/articles/2017-09-13-the-future-of-powershells-desired-state-configuration/</guid><pubDate>Wed, 13 Sep 2017 15:28:06 +0000</pubDate><description>&lt;p&gt;Microsoft &lt;a href="https://blogs.msdn.microsoft.com/powershell/2017/09/12/dsc-future-direction-update/"&gt;recently published a &amp;ldquo;Future of DSC&amp;rdquo; post&lt;/a&gt; that I thought deserved some independent commentary.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>Microsoft<a href="https://blogs.msdn.microsoft.com/powershell/2017/09/12/dsc-future-direction-update/">recently published a &ldquo;Future of DSC&rdquo; post</a> that I thought deserved some independent commentary.</p><p>Something to bear in mind is that the existing, open-source &ldquo;DSC for Linux&rdquo; was not authored by the PowerShell team. It was written by Microsoft&rsquo;s Unix Services team, and it doesn&rsquo;t currently offer the exact functionality of the Windows implementation. So some of this announcement is the PowerShell team actually &ldquo;taking on&rdquo; DSC for other platforms.<br>
This includes a new Local Configuration Manager (LCM) for PowerShell Core, which implies it&rsquo;ll run anywhere PowerShell core does - Linux, macOS, and so on - as well as Windows, since PowerShell Core can run on Windows, too. It no longer requires the complex-to-install OMI stack, and it supports DSC resources written in PowerShell, Python scripts, and C/C++.<br>
Now, it&rsquo;s important to note that this is a pre-release announcement, and the plans may not survive engagement. That&rsquo;s means the situation is still fluid, and it&rsquo;s probably a bit early to start making plans. This is a situation to<em>monitor,</em> not<em>act upon,</em> at this date.<br>
This does mean that, if plans play out as they are now,<em>everything about DSC today will probably change a lot.</em> There will be new commands to replace things like Start-DscConfiguration. But some things won&rsquo;t change: the Pull Server protocol, for example, will be supported by DSC Core (this is easy to do as the protocol isn&rsquo;t complex and is all REST-based), so the existing Pull Server and Azure Automation DSC will still work.<br>
The upside to all of this - and Microsoft&rsquo;s intent, from what I can tell - is to converge on a single code base for DSC, and make all platforms &ldquo;first class citizens.&rdquo; Today&rsquo;s DSC - what the team calls &ldquo;DSC for Windows PowerShell&rdquo; or &ldquo;Windows Management Framework (WMF) version of DSC&rdquo; - is at a dead-end. They&rsquo;re not going to delete it, but they&rsquo;re going to focus development on DSC Core.<em>That</em> has implications. It means that, in order to move forward, any custom resources you write and use need to use native C/C++, PowerShell 6 scripts, or commands that are supported under .NET Standard 2.0. WMI is right out, although it&rsquo;ll be interesting to see if the team maintains that stance, or chooses to make WMI available on Windows but not on Linux (which would break the &ldquo;same code running everywhere&rdquo; philosophy they&rsquo;re currently aimed at).<br>
The native Pull server&rsquo;s future appears to be unknown. I&rsquo;m not sure that&rsquo;s a bad thing; it&rsquo;s presented nowadays as &ldquo;sample code,&rdquo; and it&rsquo;s always been a problematic and minimally-useful chunk of code. I wish more people were looking at<a href="https://github.com/PowerShellOrg/tug">Tug</a>, which is an open-source Pull Server framework that you can code up (in PowerShell or .NET) to act however you want. It comes with a simple implementation that more or less mimics the native Pull Server, without the Jet database engine dependency (fun story: Jet/EBD was chosen because the team could get it working on Nano, and now Nano isn&rsquo;t ever going to be used for that purpose as it&rsquo;s been repositioned as a &ldquo;container OS&rdquo;). If more people invested in Tug, DSC would be a lot better off overall.<br>
My thoughts?<br>
Overall, &ldquo;yay&rdquo; for &ldquo;same functionality on all platforms.&rdquo; The potential need to rewrite a crapload of DSC resources, and possibly losing WMI (if I&rsquo;m reading this right), is a big &ldquo;boo,&rdquo; and might push people away from an already-fragile relationship with DSC. &ldquo;Boo&rdquo; also to another re-do of DSC (v4 to v5 was not immaterial), making it feel like Microsoft didn&rsquo;t really have a good long-term vision for the technology to begin with (and indeed, some of the architectural problems in v5, like how partial configurations work, further suggest a lack of vision). DSC Core may be a chance for Microsoft to re-think past approaches and fix mistakes, so &ldquo;yay&rdquo; if they do that along the way.<br>
Predominantly, though, a big &ldquo;boo&rdquo; to a continued lack of tooling. I get that DSC is an &ldquo;under the hood&rdquo; technology latter, but like zero other teams at Microsoft have, at this point, helped pile any kind of tooling on top of it. It&rsquo;s like we have the Chef engine or Puppet engine, but not of the tooling that makes those things true<em>solutions.</em><br>
Taking off my Microsoft fanboy hat, I can see it being difficult for a CIO to take a strong dependency on DSC at this point. We&rsquo;re aiming for its third iteration, which<em>will</em> break backward compatibility and, in some ways, reduce functionality. Microsoft still can&rsquo;t produce a production-viable on-prem pull server, and doesn&rsquo;t seem interested in doing so. We still don&rsquo;t have any kind of management tooling (in part, I think, to the continued shitshow that is the System Center &ldquo;strategy&rdquo; these days), so DSC remains a highly do-it-yourself endeavor. Not every organization is going to be comfortable with that. I do think Tug - again, with some do-it-yourself investment - can make DSC vastly more intelligent and powerful (you can, for example, code it to assemble MOFs on-the-fly, extract configuration fragments from a database, or literally anything else you might want), but people in the Microsoft space are used to prepackaged solutions that just install and go.<br>
I like the &ldquo;write once, run anywhere&rdquo; promise; that&rsquo;s what .NET was supposed to be all about when Microsoft stepped away from Java back in the day. I get how DSC Core,<em>for VMs running in Azure,</em> may be a first-class citizen for dynamic, declarative configurations, and how that all leads nicely to a DevOps style footing. For on-prem, DSC is going to continue to be challenging for people who aren&rsquo;t accustomed to a lot of DIY, and who are trying to take hard and long-lasting dependencies on a configuration technology.</p>]]></content:encoded></item><item><title>PowerShell and DevOps Summit 2018 – session acceptance</title><link>https://powershell.org/articles/2017-09-02-powershell-and-devops-summit-2018-session-acceptance/</link><guid>https://powershell.org/articles/2017-09-02-powershell-and-devops-summit-2018-session-acceptance/</guid><pubDate>Sat, 02 Sep 2017 11:21:32 +0000</pubDate><description>&lt;p&gt;We have started the acceptance process for the sessions to be presented at the 2018 Summit. Those currently accepted sessions are listed in the &lt;a href="https://cdn-powershell.pressidium.com/wp-content/uploads/2017/09/2018-Brochure.pdf"&gt;brochure&lt;/a&gt;&lt;br&gt;
The deadline for submissions still remains as 2 October 2017&lt;br&gt;
We&amp;rsquo;ll probably be formally accepting a number of other sessions during September BUT the bulk of the agenda won&amp;rsquo;t be finalised until after the deadline closes.&lt;br&gt;
You still have plenty of time to get your submissions into the system. The earlier you do so the more time we have to help you refine the submission.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<p>We have started the acceptance process for the sessions to be presented at the 2018 Summit. Those currently accepted sessions are listed in the<a href="https://cdn-powershell.pressidium.com/wp-content/uploads/2017/09/2018-Brochure.pdf">brochure</a><br>
The deadline for submissions still remains as 2 October 2017<br>
We&rsquo;ll probably be formally accepting a number of other sessions during September BUT the bulk of the agenda won&rsquo;t be finalised until after the deadline closes.<br>
You still have plenty of time to get your submissions into the system. The earlier you do so the more time we have to help you refine the submission.</p>
]]></content:encoded></item></channel></rss>