about_Scripting_ValidateNotNullorEmpty.help.txt

TOPIC
    about_ValidateNotNullorEmpty
 
SHORT DESCRIPTION
    A tutorial on using the [ValidateNotNullorEmpty()] parameter validation
    attribute.
     
LONG DESCRIPTION
    I've been writing about the different parameter validation attributes
    that you can use in your PowerShell scripting. One that I use in
    practically every script is [ValidateNotNullorEmpty()]. This validation
    will ensure that something is passed as a parameter value. I'm not
    talking about making a parameter mandatory; only that if the user decides
    to use the parameter that something is passed. Let's look at my demo.
 
    #requires -version 2.0
 
    Param (
    [Parameter(Position=0,Mandatory=$True,
    HelpMessage="Enter a process name like lsass")]
    [ValidateNotNullorEmpty()]
    [string]$Name,
    [Parameter(Position=1)]
    [ValidateNotNullorEmpty()]
    [string]$Computername=$env:computername
 
    )
 
    Try {
    Get-Process -Name $name -ComputerName $computername -errorAction "Stop" |
    Select *,@{Name="Runtime";Expression={(Get-Date)-$_.StartTime}}
    }
 
    Catch {
    Write-Warning $_.Exception.Message
    }
 
    I've used the attribute on both parameters. The first parameter I've also
    made mandatory which makes it more likely that something will be entered.
    But if not, then the script will fail. I will also get a similar message
    if the user forgest to complete the command.
     
    PS C:\Scripts> .\myscript.ps1 -name lsass -computername
 
    Even though I'm using a default value for Computername, as soon as the
    parameter is detected PowerShell assumes I'm going to use a different
    value.
 
    Validation should work for missing values, a variable that might be null,
    or in general anything that is meaningless. However, it won't prevent
    something quirky like this:
 
    PS C:\Scripts> $p=" "
    PS C:\Scripts> .\demo-ValidateNotNull.ps1 -name $p
    WARNING: Cannot find a process with the name " ". Verify the process name
    and call the cmdlet again.
 
    The variable, while semantically meaningless to us, is not null or empty
    but a string of 1 space. If there's the chance you might run into this
    situation then you can add additional validation checks to the parameter.
 
SEE ALSO
    about_Functions_Advanced_Parameters
    http://jdhitsolutions.com/blog