Search code examples
powershellpowershell-4.0dsc

Powershell DSC Configuration: Installing selective Windows Feature


I have powershell 4 and would like to install selective windows features for example only install File Server FS-FileServer and File Server Resource Manager FS-Resource-Manager.

[X] File and Storage Services FileAndStorage-Services Installed [X] File Server FS-FileServer Installed [X] File Server Resource Manager FS-Resource-Manager Installed

for this my sample code looks like this

Configuration JSwebDeploy2
{ 
   Import-DscResource -ModuleName PSDesiredStateConfiguration

    node "localhost"
    { 

         WindowsFeature FS-FileServer
         {
            Name = "FS-FileServer"
            Ensure = 'Present'

         }
          WindowsFeature FS-Resource-Manager
         {
            Name = "FS-Resource-Manager"
            Ensure = 'Present'

         }
    }
} 

JSwebDeploy2

Is this the correct way to go about doing with or is there a way to group all sub features together. I came across WindowsFeatureSet but that is only avaliable in Powershell 5.0 onward.


Solution

  • You should use version 5 in general, as TheMadTechnician said, but you can group the features, in a way, by generating the config in a loop:

    Configuration JSwebDeploy2
    { 
       Import-DscResource -ModuleName PSDesiredStateConfiguration
    
        node "localhost"
        { 
    
             @('FS-FileServer','FS-Resource-Manager').ForEach({
    
                 WindowsFeature $_
                 {
                    Name = $_
                    Ensure = 'Present'
                 }
             }
        }
    } 
    
    JSwebDeploy2
    

    Use your loop construct of choice, and likely you'd want to parameterize the config instead of hardcoding the array, maybe use -ConfigurationData etc., but the concept is the same: use looping and variables when you build/generate your config.

    This is just a side note, but version 5 has way more features for debugging and testing configurations, including the Invoke-DscResource cmdlet; very useful.

    But beware that WindowsFeatureSet is a Composite resource, which is not supported by that particular cmdlet.