Get-targetresource and it's returndata

This topic contains 3 replies, has 3 voices, and was last updated by Profile photo of Justin King Justin King 7 months, 3 weeks ago.

Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #34996
    Profile photo of Justin King
    Justin King
    Participant

    I'm writing a module/resource that is a little more unique than others I've written and because of this, I'm finding the format of the return data that I'd like to get back from get-targetresource to be unique even when compared to the parameters of the resource. But it then occurred to me that if the return data doesn't match the parameters then it's not as predictable and I might break something. Which leads to the question:

    Is it "safe" to treat "get-targetresource" as effectively a reporting-only function and thus while it may share the same universal parameter inputs it might return some unique output?

    Quick and dirty example: Lets say while it's not a parameter I'd use in my set-, I'd like to report back on a property of an object (like the creator of the file)? Would the lack of an "owner" parameter be a problem if "owner" made it back in the returndata of a get-targetresource?

    #34998
    Profile photo of Don Jones
    Don Jones
    Keymaster

    Yeah, generally, it's safe to treat Get-TargetResource as reporting-only. The LCM, under normal operation, really relies on Test- and Set-, to the point where a lot of early v4 resources didn't even implement Get- because v4 didn't use it.

    That said, you should keep comparisons in mind. I should be able to take the output of Get- and run a Diff against an identically structured "desired" object, and either have differences or no differences. So while it wouldn't cause a problem for the LCM, it might cause a problem for a human who had different expectations.

    #35004
    Profile photo of Dave Wyatt
    Dave Wyatt
    Moderator

    DSC supports read-only properties for this reason. For example, here's the schema for the built-in Package resource:

    [ClassVersion("1.0.0"),FriendlyName("Package")] 
    class MSFT_PackageResource : OMI_BaseResource
    {
      [write,ValueMap{"Present", "Absent"},Values{"Present", "Absent"}] string Ensure;
      [Key] string Name;
      [required] string Path;
      [Key] string ProductId;
      [write] string Arguments;
      [write,EmbeddedInstance("MSFT_Credential")] string Credential;
      [write] uint32 ReturnCode[];
      [write] string LogPath;
      [read] string PackageDescription;
      [read] string Publisher;
      [read] string InstalledOn;
      [read] uint32 Size;
      [read] string Version;
      [read] boolean Installed;
    };
    

    All of those properties marked as [read] can be returned in Get-TargetResource, but are not used anywhere else.

    #35007
    Profile photo of Justin King
    Justin King
    Participant

    perfect. Thanks for the feedback!

Viewing 4 posts - 1 through 4 (of 4 total)

You must be logged in to reply to this topic.