Author Posts

February 17, 2016 at 10:22 pm

I'm trying to have the following folder structure with Dsc Class Resources in DscResource1 and DscResource2. Everything I try with NestedModules, etc.. I keep getting errors from the LCM "Failed to create an object of PowerShell class IssRobocopy". Everything works fine if I just keep the module name files and the resource name file the same. This seems very restrictive.


February 18, 2016 at 4:41 am

For class-based resources, all of the class definitions need to be in a single psm1 file (which should be referenced by the RootModule element in your manifest, and probably safest to also name it DscModule.psm1). I don't know if / when that's going to change.

However, you can write other PowerShell functions in separate files, and just have the stuff in DscModule.psm1 be the simple shell of the classes (much like a schema.mof file in the old resources). Something like this:

class DscResource1
    [string] $Param1
    [void] Set()
        Invoke-DscResource1Set -Param1 $this.Param1 # etc

February 18, 2016 at 4:42 am

Deliberately left that code short, but you get the idea.

February 18, 2016 at 5:59 am

Thanks, that's very disappointment limitation of the class dsc model.

February 22, 2016 at 1:07 pm

I am not sure if I am getting this right. I want to combine some class based DSC resources in one PowerShell module. Are you saying that this is not possible?

February 22, 2016 at 5:52 pm

It's fine to have multiple classes in one module. The class definitions just all have to be in the same PSM1 file; you can't currently split them into multiple ps1 files and dot-source them from the PSM1, or anything along those lines.

February 26, 2018 at 10:53 pm

I'm not sure if in the mean time people have worked this out but the way to do this is to create another folder in the root of your module called DSCClassResources. Each Class resource has a module manifest and is referenced as a nested module within the parent module manifest.

* MyModule
** DSCClassResources
*** Resource1
**** Resource1.psm1
**** Resource1.psd1
** DSCResources
*** Resource2
**** Resource2.schema.mof
**** Resource2.psm1
** MyModule.psd1