Inheritance in class based DSC resources.

Hey all,

I recently made a post about some of the problems I’ve encountered using the class based resources, wondered if anyone has a solution or have attempted this before?

http://www.lukegriffith.co.uk/powershell/dsc/2016/06/16/Limitations-of-class-based-dsc-providers.html

DSC Class based resources has no relation with DSC WMI resources and they are not supposed to be registered with WMI. Something else is going on here.
From the error it appears that your target node either doesn’t have the module ‘inheritedResource’ installed or the version of the module installed is different than 1.0.
Try the following to troubleshoot on your target node:

  1. Get-DscResource -module inheritedResource –> This should show DSC resource inheritedResource with module version 1.0
  2. Import-Module inheritedResource -verbose

If these two are working as expected, can you share your resource?

Hey Nitin,

Check out the GitHub project i linked on the blog post, GitHub - lukegriffith/DSCInheritance: DSC resource superclass/subclass relationship.

That has the modules and the psake job that I ran. Following your steps it responds and works fine.


PS wrk:> Get-DscResource -Module InheritedResource

ImplementedAs Name ModuleName Version Properties


PowerShell InheritedResource InheritedResource 1.0 {Enforce, Ensure, SettingName, DependsOn…}

PS wrk:> import-module InheritedResource -Verbose
VERBOSE: Loading module from path ‘C:\Users\lukem\Documents\WindowsPowerShell\Modules\InheritedResource\InheritedResource.psd1’.
VERBOSE: Loading module from path ‘C:\Users\lukem\Documents\WindowsPowerShell\Modules\InheritedResource\InheritedResource.psm1’.

I tried this resource with the following test configuration on WMF 5.0 RTM build and it executed successfully. Are you using WMF 5.0 pre production or WMF 5.0 RTM?

configuration foo
{
	param(
		[string] $settingsName
	)
	import-dscresource -module InheritedResource
	
	$guidValue = [guid]::NewGuid()
	
	InheritedResource r1
        {
		settingName=$settingsName
		guid=$guidValue
		Enforce= "Always"
		Ensure = "Present"
         }
}

foo -settingsName "NewSetting"

PS C:\Users\duser1\Desktop> Start-DscConfiguration -path foo -wait -Verbose
VERBOSE: Perform operation 'Invoke CimMethod' with following parameters, ''methodName' =
SendConfigurationApply,'className' = MSFT_DSCLocalConfigurationManager,'namespaceName' =
root/Microsoft/Windows/DesiredStateConfiguration'.
VERBOSE: An LCM method call arrived from computer COM12R25RTM01 with user sid
S-1-5-21-2800768176-829124343-4290817346-1106.
VERBOSE: [COM12R25RTM01]: LCM:  [ Start  Set      ]
VERBOSE: [COM12R25RTM01]: LCM:  [ Start  Resource ]  [[InheritedResource]r1]
VERBOSE: [COM12R25RTM01]: LCM:  [ Start  Test     ]  [[InheritedResource]r1]
VERBOSE: [COM12R25RTM01]: LCM:  [ End    Test     ]  [[InheritedResource]r1]  in 0.1560 seconds.
VERBOSE: [COM12R25RTM01]: LCM:  [ Skip   Set      ]  [[InheritedResource]r1]
VERBOSE: [COM12R25RTM01]: LCM:  [ End    Resource ]  [[InheritedResource]r1]
VERBOSE: [COM12R25RTM01]: LCM:  [ End    Set      ]
VERBOSE: [COM12R25RTM01]: LCM:  [ End    Set      ]    in  0.4380 seconds.
VERBOSE: Operation 'Invoke CimMethod' complete.
VERBOSE: Time taken for configuration job to complete is 0.557 seconds`

I’ve managed to test on both the below revisions.

Major Minor Build Revision


5 0 10586 117

Major Minor Build Revision


5 0 10586 122

Originally I tested on a Win 10 machine, now testing on 2012 r2 core I’m getting a slightly different error.


PS C:\Users\lukem\OneDrive\Documents\GitHub\DSCInheritance> Invoke-psake -buildFile .\build.ps1 -taskList Integrate
psake version 4.6.0
Copyright (c) 2010-2014 James Kovacs & Contributors

cmdlet Get-Credential at command pipeline position 1
Supply values for the following parameters:
Credential
Executing Deploy

Name Used (GB) Free (GB) Provider Root C


Target FileSystem \srv\c$\Program Files\WindowsPo…
VERBOSE: Performing the operation “Copy Directory” on target “Item: C:\Users\lukem\OneDrive\Documents\GitHub\DSCInheritance\Modules Destination: \srv\c$\Program Files\WindowsPowerShell\Modules\Modules”.
Copy-Item : An item with the specified name \srv\c$\Program Files\WindowsPowerShell\Modules\Modules already exists.
At C:\Users\lukem\OneDrive\Documents\GitHub\DSCInheritance\build.ps1:34 char:9

  •     Copy-Item -Path $_.FullName -Destination Target:  -Verbose -R ...
    
  •     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    • CategoryInfo : ResourceExists: (\srv\c$\Progra…Modules\Modules:String) [Copy-Item], IOException
    • FullyQualifiedErrorId : DirectoryExist,Microsoft.PowerShell.Commands.CopyItemCommand

VERBOSE: Performing the operation “Copy Directory” on target “Item: C:\Users\lukem\OneDrive\Documents\GitHub\DSCInheritance\Modules\Base Destination: \srv\c$\Program Files\WindowsPowerShell\Modules\Modules\Base”.
VERBOSE: Performing the operation “Create Directory” on target “Destination: \srv\c$\Program Files\WindowsPowerShell\Modules\Modules\Base”.
VERBOSE: Performing the operation “Copy File” on target “Item: C:\Users\lukem\OneDrive\Documents\GitHub\DSCInheritance\Modules\Base\Base.psd1 Destination: \srv\c$\Program Files\WindowsPowerShell\Modules\Modules\Base\Base.psd1”.
VERBOSE: Performing the operation “Copy File” on target “Item: C:\Users\lukem\OneDrive\Documents\GitHub\DSCInheritance\Modules\Base\Base.psm1 Destination: \srv\c$\Program Files\WindowsPowerShell\Modules\Modules\Base\Base.psm1”.
VERBOSE: Performing the operation “Copy Directory” on target “Item: C:\Users\lukem\OneDrive\Documents\GitHub\DSCInheritance\Modules\InheritedResource Destination: \srv\c$\Program Files\WindowsPowerShell\Modules\Modules\InheritedResource”.
VERBOSE: Performing the operation “Create Directory” on target “Destination: \srv\c$\Program Files\WindowsPowerShell\Modules\Modules\InheritedResource”.
VERBOSE: Performing the operation “Copy File” on target “Item: C:\Users\lukem\OneDrive\Documents\GitHub\DSCInheritance\Modules\InheritedResource\InheritedResource.psd1 Destination: \srv\c$\Program
Files\WindowsPowerShell\Modules\Modules\InheritedResource\InheritedResource.psd1”.
VERBOSE: Performing the operation “Copy File” on target “Item: C:\Users\lukem\OneDrive\Documents\GitHub\DSCInheritance\Modules\InheritedResource\InheritedResource.psm1 Destination: \srv\c$\Program
Files\WindowsPowerShell\Modules\Modules\InheritedResource\InheritedResource.psm1”.
Executing Integrate

LastWriteTime : 22/06/2016 18:59:46
Length : 2058
Name : srv.mof

VERBOSE: Perform operation ‘Invoke CimMethod’ with following parameters, ‘‘methodName’ = SendConfigurationApply,‘className’ = MSFT_DSCLocalConfigurationManager,‘namespaceName’ = root/Microsoft/Windows/DesiredStateConfiguration’.
VERBOSE: An LCM method call arrived from computer SRV with user sid S-1-5-21-428108033-3095240199-1711482074-500.
VERBOSE: [SRV]: LCM: [ Start Set ]
VERBOSE: [SRV]: LCM: [ End Set ]
Error: 22/06/2016 18:59:47:

  • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [] Exception: Importing module InheritedResource failed with error - The specified module 'Base' was not loaded because no valid module file was found in any module directory.
    

Some output from SRV

[srv]: PS C:\Users\Administrator\Documents> Get-DscResource -Module InheritedResource

ImplementedAs Name ModuleName Version Properties


PowerShell InheritedResource InheritedResource 1.0 {Enforce, Ensure, SettingName, Depend…

[srv]: PS C:\Users\Administrator\Documents> Get-Module -ListAvailable | ? {$.Name -like “Inheri*” -or $.Name -eq “Base”}

Directory: C:\Program Files\WindowsPowerShell\Modules\Modules

ModuleType Version Name ExportedCommands


Script 1.0 Base
Script 1.0 InheritedResource

I also tested it with version 5.0.10586.117, so at least we can do testing on similar environment.
Can you try the sample I pasted using InheritedResource as that worked for me using the same build?
If that works then can you share your generated mof file and I will try to find the root cause of this issue at my end.

Get-DScResource is supposed to show the resources from both InheritedResource and Base. Somehow it is not detecting the resources from Base.

PowerShell Base Base 1.0 {Enforce, Ensure, guid, DependsO…
PowerShell InheritedResource InheritedResource 1.0 {Enforce, Ensure, guid, SettingN…

Heres the MOF that i generated on revision 177.

Something curious I’ve found, on Base i specifically chose not to export the DSC resource from the module, as it caused InheritedResource not to be discovered. I’ve just updated the psd1 for base to export the resource and now I cannot get InheritedResource from the Get-DscResource command.

/*
@TargetNode=‘localhost’
@GeneratedBy=Administrator
@GenerationDate=06/22/2016 19:01:47
@GenerationHost=SRV
*/

instance of InheritedResource as $InheritedResource1ref
{
ResourceID = “[InheritedResource]r1”;
Enforce = “Always”;
Ensure = “Present”;
SourceInfo = “::10::2::InheritedResource”;
SettingName = “NewSetting”;
ModuleName = “InheritedResource”;
ModuleVersion = “1.0”;

ConfigurationName = “foo”;

};
instance of OMI_ConfigurationDocument

                {

Version=“2.0.0”;

                    MinimumCompatibleVersion = "1.0.0";


                    CompatibleVersionAdditionalProperties= {"Omi_BaseResource:ConfigurationName"};


                    Author="Administrator";


                    GenerationDate="06/22/2016 19:01:47";


                    GenerationHost="SRV";


                    Name="foo";


                };

On my machine both Base and InheritedResource are exporting DSC Resource and Get-DscResource is able to discover them. Let us make sure that I am using exactly same bits as yours for testing.

PS C:\Users\duser1\Desktop> dir C:\Windows\system32\DscCore.dll| select VersionInfo| fl *


VersionInfo : File:             C:\Windows\system32\DscCore.dll
              InternalName:     DscCore.dll
              OriginalFilename: DscCore.dll.mui
              FileVersion:      10.0.10586.117 (th2_release.160212-2359)
              FileDescription:  DSC
              Product:          Microsoft® Windows® Operating System
              ProductVersion:   10.0.10586.117
              Debug:            False
              Patched:          False
              PreRelease:       False
              PrivateBuild:     False
              SpecialBuild:     False
              Language:         English (United States)

PS C:\Users\duser1\Desktop> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.0.10586.117
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.10586.117
CLRVersion                     4.0.30319.34003
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

PS C:\Users\duser1\Desktop> Get-DscResource -Name in*

ImplementedAs   Name                      ModuleName                     Version    Properties
-------------   ----                      ----------                     -------    ----------
PowerShell      InheritedResource         InheritedResource              1.0        {Enforce, Ensure, guid, SettingN...


PS C:\Users\duser1\Desktop> Get-DscResource -Name base

ImplementedAs   Name                      ModuleName                     Version    Properties
-------------   ----                      ----------                     -------    ----------
PowerShell      Base                      Base                           1.0        {Enforce, Ensure, guid, DependsO...

Infact, my deploy script was wrong for this server.

SRV has managed to run the DSC resource, so it looks like it potentially could be a problem with the 5.0.10586.122 release.

I will check on build 122 in a while and let you know my findings.

Thanks for your help.

Luke, it seems like you are copying modules in a non expected folder (notice extra Modules in the path)

[srv]: PS C:\Users\Administrator\Documents> Get-Module -ListAvailable | ? {$.Name -like “Inheri*” -or $.Name -eq “Base”}

Directory: C:\Program Files\WindowsPowerShell\Modules\Modules

ModuleType Version Name ExportedCommands
———- ——- —- —————-
Script 1.0 Base
Script 1.0 InheritedResource

Can you try to copy the modules directly under Modules folder and try again.