about_Scripting_ValidateLength.help.txt
TOPIC
about_Scripting_ValidateLength SHORT DESCRIPTION A tutorial on validating a parameter by its length. LONG DESCRIPTION You can use this attribute in your PowerShell scripting to validate that a parameter value is at least a certain length and no more and a certain length. In other words, it has to be just right. Here’s what it looks like: [ValidateLength(2,10)] [string]$Fooby In this example any value for -Fooby must be at least 2 characters long and no more than 10. Anything outside of that range and PowerShell will raise an exception. You have to supply both values in the validation attribute. An alternative would be to use [ValidateScript()]. [ValidateScript({ $_.Length -ge 5})] [string]$Name Now, any value for -Name must be at least 5 characters and there is no upper limit. Here’s a more complete example. #requires -version 2.0 [cmdletbinding(SupportsShouldProcess=$True)] Param ( [Parameter(Position=0,Mandatory=$True, HelpMessage="Enter name between 5 and 15 characters")] [ValidateLength(5,15)] [string]$Name, [Parameter(Position=1,Mandatory=$True, HelpMessage="Enter password between 7 and 64 characters")] [ValidateLength(7,64)] [ValidatePattern({^\S+$})] [string]$Password, [string]$Computername=$env:computername, [switch]$Passthru ) Write-Host "Creating $name with password of $Password on $computername" ` -ForegroundColor Green [ADSI]$Server="WinNT://$computername" $User=$server.Create("User",$Name) if ($pscmdlet.ShouldProcess($User.Path)) { Write-Host "Committing new account changes" -ForegroundColor Green <# #uncomment the next lines if you really, really want to do this $User.SetInfo() Write-Host "Setting password" -ForegroundColor Green $User.SetPassword($Password) If ($passthru) { Write-Output $User } #> } This script will create a local user account. I’m asking that the user name be between 5 and 15 characters and that the password be between 7 and 64 characters. I’ve also added a second validation check on the password using [ValidatePattern()] to verify it doesn’t contain any spaces. The exception message you see with [ValidateLength()] depends on where you fall short. PS C:\Scripts> .\Demo-ValidateLength.ps1 Jeff Password123 C:\scripts\Demo-ValidateLength.ps1 : Cannot validate argument on parameter 'Name'. The number of characters (4) in the argument is too small. Specify an argument whose length is greater than or equal to "5" and then try the command again . At line:1 char:26 + .\Demo-ValidateLength.ps1 <<<< Jeff Password123 + CategoryInfo : InvalidData: (:) [Demo-ValidateLength.ps1], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Demo- ValidateLength.ps1 PS C:\Scripts> .\Demo-ValidateLength.ps1 JeffJeffJeffJeff Password123 C:\scripts\Demo-ValidateLength.ps1 : Cannot validate argument on parameter 'Name'. The argument length of 16 is too long. Shorten the length of the argument to less than or equal to "15" and then try the command again. At line:1 char:26 + .\Demo-ValidateLength.ps1 <<<< JeffJeffJeffJeff Password123 + CategoryInfo : InvalidData: (:) [Demo-ValidateLength.ps1], ParameterBindingValidationException + FullyQualifiedErrorId : ParameterArgumentValidationError,Demo- ValidateLength.ps1 You can also use this attribute to verify that a value is of an exact length, by making the minimum and maximum values the same. [ValidateLength(5,5)] [string]$Name Now, any value for $Name must be exactly 5 characters long. SEE ALSO about_Functions_Advanced_Parameters http://jdhitsolutions.com/blog |