ValidateSet for a Parameter in a DSC Class Based Resource Fails to Throw Error

While working on a Custom DSC Resource that I started Monday night at the PowerShell Summit I came across some interesting behavior that turned out to be a bug in the WMF 5.0 February Preview. I have logged this issue in Connect, but I wanted to write a blog post to demonstrate what exactly is going on for when someone else runs into this issue. I am just going to the use Custom DSC Resource for creating a Primary DNS Zone that I was working on as the example to demonstrate the behavior.

Here are the properties for the resource. I figured I could just do ValidateSet like I always had done for an advanced function or non-class based DSC Resource.

My Configuration for testing the Resource looks like this:

If I run this Configuration, with one of the appropriate values for ReplicationScope, it works exactly like you would expect it to.

That’s great. But, what happens if I put in a value that isn’t part of Validate Set?

That is clearly not what should happen. You would expect to see an error saying something to effect of “HokeyPokey does not belong to the set “Domain”,”Forest”,”Current”,”Legacy”, it needs to be one of those values”.

If we look at the .MOF file that gets created, this incorrect value also makes it into the .MOF file:

You can tell that it knows something is wrong, because when it runs through Test-TargetResource and Set-TargetResource it doesn’t actually do anything (notice all the Verbose messages that are missing from the previous example), but it also doesn’t error.

So how do we get around this? By using an Enum!

Now, if I try to set the ReplicationScope to HokeyPokey, we get the behavior we would expect.