Sharing of thoughts and information is what blogging is all about. This way we can learn from each other. Post A Comment!These postings are provided "AS IS" with no warranties, and confers no rights. You assume all risk for your use.
Anthony Bartolo Twitter | LinkedIn
Pierre Roman Twitter | LinkedIn
A new technology was released when Microsoft and the PowerShell team launched Windows Management Framework 4.0 and the latest incarnation of PowerShell.
….and boy is its name a MOUTHFUL!
I am of course referring to DSC or “Desired State Configuration”. A new feature brought forth that allows you to define the configuration of a server in a very simple fashion.
Let me step back though for a moment, let’s think about your standard server. Once you have the operating system installed, what makes it unique from other servers? Let’s pick some basics.
Name of Server
Key roles and features required by the Server Application(s)
Normally you would navigate through the GUI to make the necessary changes. If you were really good you’d write up a Vbscript or do something up with PowerShell to automate the changes. Possibly you may even have used DISM.EXE or leveraged an Unattend.xml to smooth out this process.
All of these methods are still current and valid and hold their own special place but with DSC we have a more interesting option. We can now literally create a simple and easy to read file which can define one or multiple servers for their configuration.
A basic DSC file follows a very simple format. It will have
Node name (Your destination computer name)
Looking at a simplistic DSC file it would look like this.
Now although this is done within Windows PowerShell, the beautiful part is a DSC file really doesn’t look like much of a PowerShell script. As you can see from the example below, here is an actual DSC configuration file.
Ensure = "Present"
Name = "FileAndStorage-Services"
Name = "Print-Services"
So this DSC file has some really simple information. The Configuration name is “MySampleFileServer”. This could be anything but when you refer to this overall configuration its name is “MySampleFileServer”
This particular configuration is destined for a Server called “CONTOSO-FPS” which has some Features we’ll need. The “FileandStorage-Services” and “Print-Services”. As you can see we need to ensure each one is “Present”.
Not so bad. I don’t see any real code, just a nice to read list.
Now how would I use that? You place this into your PowerShell ISE (Integrated Scripting Environment) and execute it. Once done at the PowerShell prompt type in the name of your Configuration and execute it, just like when you run a function.
What will happen then is the file will create a folder called “MySampleFileServer” containing a file called “EOT-FPS.mof”
This file is your compiled DSC configuration. You can open it up and read it. It’s just a text file that looks like this.
instance of MSFT_RoleResource as $MSFT_RoleResource1ref
ResourceID = "[WindowsFeature]FileStorage";
Ensure = "Present";
SourceInfo = "C:\\ISO\\dsc-sample1.ps1::5::9::WindowsFeature";
Name = "FileAndStorage-Services";
ModuleName = "PSDesiredStateConfiguration";
ModuleVersion = "1.0";
instance of MSFT_RoleResource as $MSFT_RoleResource2ref
ResourceID = "[WindowsFeature]PrinterSharing";
SourceInfo = "C:\\ISO\\dsc-sample1.ps1::10::9::WindowsFeature";
Name = "Print-Services";
instance of OMI_ConfigurationDocument
Now of course we can see why you want the DSC version. It’s a LOT nicer on the eyes! But as you can see the output is a .MOF file. That’ right….. STANDARDS…. DSC now crosses into STANDARDS!
So how can we apply this to our server in question? You’ll love this. Just run the following Powershell Cmdlet with the created .MOF file.
In moments all of those settings on the destination server (presuming of course you are running PowerShell 4.0 on the remote system) will now be applied.
There’s a bit more to the Architecture. This was only a simple Push configuration. With DSC you can also have a Pull Configuration where Servers consistently check to make sure they are running in the “Desired State”.
Today we only showed you a simple setup. A Basic file server.
But DSC can also trap for services, intended files, Registry settings and more.
Stick around, next time I’ll pop back in with a bit more for you to sink your teeth into.
Remember, the Power of Shell is in YOU
Sean the Energized Tech Windows PowerShell MVP Honorary Scripting Guy