Monday, January 06, 2014

PowerShell Validation Attributes -- validates in assignment

Validation Attributes in PowerShell ...Eh! I use them like everyday when I script.......But I noticed this thing recently.

So suppose I have a sample function below:

Now as you see it's nothing just run it

PS C:\> Test-ValidateRange -Param1 8
Param1 = 8
The variable cannot be validated because the value 11 is not a valid value for the Param1 variable.
At line:19 char:5
+     $Param1 = 11
+     ~~~~~~~~~~~~
    + CategoryInfo          : MetadataError: (:) [], ValidationMetadataException
    + FullyQualifiedErrorId : ValidateSetFailure
Param1 = 8

PS C:\>

It seems that the validation attribute not only just run at the time when you first call the function ..but once you have defined a validation attribute on a parameter then through the lifetime of that variable/parameter if you do assign a new value to it then the validation attribute run against it ..thus guaranteeing that it has the value you wanted.

To better see it you can save the file put a break point at the assignment operation being done in above code and then step one line at a time....It's cool once I have validation attributes in place....then PowerShell ensures that the variable has a value which adheres to them .....Cool !

There is another very cool thing -- you can use the validation attributes with the variables in your code (only in PowerShell v3). Read the article here in the PowerShellMagazine