Validation Attributes in PowerShell ...Eh! I use them like everyday when I script.......But I noticed this thing recently.
Now as you see it's nothing fancy..so just run it
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.
So suppose I have a sample function below:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
function Test-ValidateRange | |
{ | |
[CmdletBinding()] | |
[OutputType([int])] | |
Param | |
( | |
# Param1 help description | |
[Parameter(Mandatory=$true, | |
ValueFromPipelineByPropertyName=$true, | |
Position=0)] | |
[Validaterange(0,10)] | |
$Param1 | |
) | |
Write-Output "Param1 = $param1" | |
#Now try to assign it to a value beyond the range [0,10] | |
$Param1 = 11 | |
Write-Output "Param1 = $Param1" | |
} |
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.
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