Posted by: | April 14, 2010 | No Comment |

Lets start looking at validation of parameter values. We have a few options to try

[ValidateCount(1,n)]
[ValidateLength(1,m)]
[ValidatePattern("[A-Z][A-Z]A-Z][0-9]")]
[ValidateRange(0,10)]
[ValidateScript({\$_ -lt 4})]
[ValidateSet("red","blue","green")]

[ValidateNotNull()]
[ValidateNotNullOrEmpty()]

 001 002 003 004 005 006 007 008 function test1 {     param (         [int]         [validateRange(1,5)]         \$p1   )     \$p1 * 3    }

We have a simple function that defines 1 parameter – in my recent post showing all of the possible parameters [datatype] referred to the data type we were assigning to the parameter in this case an integer.

We’ll define a valid range of 1-5 for this value

Our function does a simple multiplication to show its working.

As a test

PS> 1..5 | foreach {test1 \$_}
3
6
9
12
15

Everything works.  what happens if we submit a value outside the allowed range?

PS> 4..7 | foreach {test1 \$_}
12
15
test1 : Cannot validate argument on parameter ‘p1’. The 6 argument is greater than the m
aximum allowed range of 5. Supply an argument that is less than 5 and then try the comma
nd again.
At line:1 char:22
+ 4..7 | foreach {test1 <<<<  \$_}
+ CategoryInfo          : InvalidData: (:) [test1], ParameterBindingValidationExcep
tion
+ FullyQualifiedErrorId : ParameterArgumentValidationError,test1
test1 : Cannot validate argument on parameter ‘p1’. The 7 argument is greater than the m
aximum allowed range of 5. Supply an argument that is less than 5 and then try the comma
nd again.
At line:1 char:22
+ 4..7 | foreach {test1 <<<<  \$_}
+ CategoryInfo          : InvalidData: (:) [test1], ParameterBindingValidationExcep
tion
+ FullyQualifiedErrorId : ParameterArgumentValidationError,test1

4 and 5 are accepted but 6 and 7 are rejected.

If we fall outside the lower range

PS> 2..0 | foreach {test1 \$_}
6
3
test1 : Cannot validate argument on parameter ‘p1’. The 0 argument is less than the mini
mum allowed range of 1. Supply an argument that is greater than 1 and then try the comma
nd again.
At line:1 char:22
+ 2..0 | foreach {test1 <<<<  \$_}
+ CategoryInfo          : InvalidData: (:) [test1], ParameterBindingValidationExcep
tion
+ FullyQualifiedErrorId : ParameterArgumentValidationError,test1

A simple test that protects the function. Using this supposes we know what the range of values should be

under: PowerShellV2