Skip to content
This repository was archived by the owner on Feb 24, 2021. It is now read-only.
This repository was archived by the owner on Feb 24, 2021. It is now read-only.

Get-DscResource throws an error when there is an Inheritance in class based DSC Resources #489

Description

@SimeonGerginov

Description: There seems to be a problem when having base classes for DSC Resources you want to reuse. The problem occurs when having the 'Using module' clause, if you define the base class in the same file, no error is thrown. However, this way you cannot reuse base classes for multiple DSC Resources.

Full Example:

BaseDSC class is defined in a separate module 'Base'.

class BaseDSC {
    [DscProperty(Key)]
    [string] $Server
}

With 'Using module' I import it in the Resource module:

Using module Base

[DscResource()]
class DscResource : BaseDSC {
    [DscProperty()]
    [string] $Name
}

When you import the module and call Get-DscResource:

Import-Module -Name <Name of Module>
Get-DscResource

The following error is thrown:

Exception calling "ImportClassResourcesFromModule" with "3" argument(s): "Class feature already defined: Server
At line:9, char:23
Buffer:
[key]string Server;^
[r
"
At C:\windows\system32\WindowsPowerShell\v1.0\Modules\PSDesiredStateConfiguration\PSDesiredStateConfiguration.psm1:2573 char:5
+ $resourcesFound = [Microsoft.PowerShell.DesiredStateConfiguration ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : CimException

The problem only occurs when calling Get-DscResource in the same process as Import-Module. If we Import the module in one process and call Get-DscResource in another, the error does not occur.

Activity

  1. added
    bugThe issue is a bug.
    externalThe issue cannot be resolved within the DSC Resource Kit.
    on Mar 26, 2019
  2. gaelcolas commented on Mar 26, 2019

    @gaelcolas
    Contributor

    I'm afraid that's not a bug from a DSC Resource of the Resources Kit, but a PowerShell one.

    As you are using Windows PowerShell, your best bet is probably to open a support request with Microsoft, but not sure it'd go very far.
    If you can reproduce on PS Core, you might want to file it on the PowerShell/PowerShell github repository.

    Btw, I love the work you guys do there 🤓

    I'll leave that open for now so that the community can see it, learn, and maybe find tips & work around.

  3. gaelcolas commented on Aug 26, 2019

    @gaelcolas
    Contributor

    Hi SimeonGerginov,
    I struggle to reproduce your error.
    Could you please let me know what's your $PSversionTable.PSVersion
    Also do a get-module -listAvailable PSDesiredStateConfiguration (could be my environment that has been altered).
    Could you provide a repository with the modules and tests you run?

    To attempt to reproduce I created two modules:

    ├───ClassExtends
    │       ClassExtends.psd1
    │       ClassExtends.psm1
    │
    ├───ClassRsrcWithSubType2
    │       ClassRsrcWithSubType2.psd1
    │       ClassRsrcWithSubType2.psm1
    

    The ClassRsrcWithSubType2 is just a Class based resource that works fine.
    The Second is this, as per your issue:

    Using module ClassRsrcWithSubType2
    
    [DscResource()]
    class ClassExtends : ClassRsrcWithSubType2 {
        [DscProperty()]
        [string] $stuff
    
    }

    When I do:
    ipmo ClassRsrcWithSubType2
    then Get-DsCResource I have no (related) issues as you mention, and it does find my ClassExtends resource.

    I do see why it could fail (if it duplicates the class entry in the cache), but it does not seem to (for me).

  4. SimeonGerginov commented on Sep 2, 2019

    @SimeonGerginov
    Author
    1. PowerShell version
    PS C:\windows\system32> $PSversionTable.PSVersion
    
    Major  Minor  Build  Revision
    -----  -----  -----  --------
    5      1      17763  592
    
    1. Desired State Configuration Module
    PS C:\windows\system32> Get-Module -ListAvailable PSDesiredStateConfiguration
    
    
        Directory: C:\windows\system32\WindowsPowerShell\v1.0\Modules
    
    
    ModuleType Version    Name                                ExportedCommands
    ---------- -------    ----                                ----------------
    Manifest   1.1        PSDesiredStateConfiguration         {Set-DscLocalConfigurationManager, Start-DscConfiguration, Test-DscConfiguration, Publish-DscConfiguration...}
    

    Well based on your example I get the impression that ClassRsrcWithSubType2 is a Class based DSC Resource but in my case BaseDSC is not a DSC Resource. It is a PowerShell class only that is then extended by the DSC Resources. So that may be the reason why the error is not reproduced.

    P.S. If the bug is still not reproduced, I will provide an example module with more details.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThe issue is a bug.externalThe issue cannot be resolved within the DSC Resource Kit.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions