Bird
Raised Fist0
PowerShellscripting~10 mins

Parameter validation in PowerShell - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Parameter validation
Start Script
Define Function with Parameters
Call Function
Validate Parameters
Run Code
End
The script defines a function with parameters that are checked when called. If parameters are valid, the code runs; if not, an error shows.
Execution Sample
PowerShell
function Test-Param {
  param(
    [ValidateNotNullOrEmpty()][string]$Name
  )
  "Hello, $Name"
}
Test-Param -Name "Alice"
This script defines a function that requires a non-empty string parameter and then calls it with 'Alice'.
Execution Table
StepActionParameter ValueValidation ResultOutput or Error
1Define function Test-Param with parameter NameN/AN/AN/A
2Call Test-Param with Name='Alice'AliceValid (not null or empty)Function runs
3Inside function, output greetingAliceN/AHello, Alice
4Call Test-Param with Name=''Empty stringInvalid (empty)Error: Cannot be null or empty
5Call Test-Param with Name=$nullNullInvalid (null)Error: Cannot be null or empty
💡 Execution stops when parameter validation fails, showing an error.
Variable Tracker
VariableStartCall 1Call 2Call 3
$Nameundefined"Alice"""null
Key Moments - 3 Insights
Why does the function show an error when passing an empty string?
Because the parameter has [ValidateNotNullOrEmpty()] attribute, which rejects empty strings as shown in execution_table row 4.
What happens if the parameter is null?
The validation fails and PowerShell throws an error before running the function body, as seen in execution_table row 5.
Does the function run if the parameter is a valid non-empty string?
Yes, the function runs and outputs the greeting, as shown in execution_table row 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the output when Name='Alice'?
ANo output
BError: Cannot be null or empty
C"Hello, Alice"
D"Hello, "
💡 Hint
Check row 3 in the execution_table for the output when parameter is valid.
At which step does the validation fail for an empty string parameter?
AStep 4
BStep 2
CStep 3
DStep 1
💡 Hint
Look at the validation result and output columns in execution_table row 4.
If we remove [ValidateNotNullOrEmpty()] from the parameter, what changes in the execution?
AFunction will error on valid strings
BFunction will accept empty or null and run without error
CFunction will still error on empty string
DFunction will not run at all
💡 Hint
Refer to the validation attribute role shown in key_moments and execution_table.
Concept Snapshot
Parameter validation in PowerShell uses attributes like [ValidateNotNullOrEmpty()] to check input.
If input fails validation, PowerShell throws an error before running the function.
Valid inputs let the function run normally.
Use validation to catch bad inputs early and keep scripts safe.
Full Transcript
This visual execution shows how PowerShell validates function parameters. The function Test-Param requires a non-empty string parameter named Name. When called with 'Alice', the parameter passes validation and the function outputs 'Hello, Alice'. When called with an empty string or null, the validation fails and PowerShell throws an error before running the function body. The variable $Name changes with each call, showing the input values. Key moments explain why empty or null inputs cause errors and how validation protects the function. The quiz tests understanding of validation results and effects of removing validation. This helps beginners see how parameter validation works step-by-step.

Practice

(1/5)
1. What is the main purpose of parameter validation in a PowerShell script?
easy
A. To speed up the script execution
B. To format the output of the script
C. To check input values before the script runs to avoid errors
D. To create new variables automatically

Solution

  1. Step 1: Understand parameter validation role

    Parameter validation ensures inputs meet certain rules before the script runs.
  2. Step 2: Identify the main benefit

    This prevents errors caused by bad inputs and makes scripts safer.
  3. Final Answer:

    To check input values before the script runs to avoid errors -> Option C
  4. Quick Check:

    Parameter validation = input checking [OK]
Hint: Validation checks inputs early to prevent errors [OK]
Common Mistakes:
  • Thinking validation speeds up script
  • Confusing validation with output formatting
  • Assuming validation creates variables
2. Which of the following is the correct syntax to validate that a parameter only accepts values from a fixed set: 'Red', 'Green', or 'Blue'?
easy
A. [ValidateSet('Red','Green','Blue')] param([string]$Color)
B. [ValidateRange('Red','Green','Blue')] param([string]$Color)
C. [ValidateNotNullOrEmpty('Red','Green','Blue')] param([string]$Color)
D. [ValidatePattern('Red|Green|Blue')] param([string]$Color)

Solution

  1. Step 1: Identify correct validation attribute for fixed sets

    [ValidateSet] restricts input to specific allowed values.
  2. Step 2: Match syntax with attribute usage

    The syntax [ValidateSet('Red','Green','Blue')] is correct for this purpose.
  3. Final Answer:

    [ValidateSet('Red','Green','Blue')] param([string]$Color) -> Option A
  4. Quick Check:

    Fixed set validation = ValidateSet [OK]
Hint: Use ValidateSet for fixed allowed values [OK]
Common Mistakes:
  • Using ValidateRange for strings
  • Confusing ValidateNotNullOrEmpty with value restriction
  • Using ValidatePattern incorrectly for sets
3. What will be the output of this script if called with -Age 25?
function Test-Age {
  param(
    [ValidateRange(18,30)]
    [int]$Age
  )
  "Age is $Age"
}
Test-Age -Age 25
medium
A. "Age is 18"
B. Error: Parameter validation failed
C. No output
D. "Age is 25"

Solution

  1. Step 1: Check parameter validation range

    The parameter $Age must be between 18 and 30 inclusive.
  2. Step 2: Verify input against range

    Input 25 is within the range, so validation passes and script runs.
  3. Final Answer:

    "Age is 25" -> Option D
  4. Quick Check:

    25 in 18-30 range = valid input [OK]
Hint: Check if input fits ValidateRange limits [OK]
Common Mistakes:
  • Assuming validation fails for valid input
  • Confusing output with error message
  • Ignoring the inclusive range
4. Identify the error in this parameter validation code:
function Set-Name {
  param(
    [ValidateNotNullOrEmpty()]
    [string]$Name
  )
  "Name set to $Name"
}
Set-Name -Name $null
medium
A. The parameter type should be [int] instead of [string]
B. The function will throw a validation error because $Name is null
C. The ValidateNotNullOrEmpty attribute is used incorrectly without parameters
D. The function will accept null and print 'Name set to '

Solution

  1. Step 1: Understand ValidateNotNullOrEmpty behavior

    This attribute rejects null or empty string inputs.
  2. Step 2: Analyze input value

    The input is $null, which violates the validation rule, causing an error.
  3. Final Answer:

    The function will throw a validation error because $Name is null -> Option B
  4. Quick Check:

    Null input with ValidateNotNullOrEmpty = error [OK]
Hint: Null or empty inputs fail ValidateNotNullOrEmpty [OK]
Common Mistakes:
  • Thinking null is accepted
  • Assuming ValidateNotNullOrEmpty needs parameters
  • Confusing parameter type requirements
5. You want to create a script parameter $Port that only accepts integers between 1024 and 65535 and cannot be empty. Which parameter validation attributes should you use together?
hard
A. [ValidateRange(1024,65535)][ValidateNotNullOrEmpty()]
B. [ValidateSet(1024,65535)][ValidateNotNullOrEmpty()]
C. [ValidatePattern('^[0-9]{4,5}$')]
D. [ValidateNotNullOrEmpty()][ValidateLength(4,5)]

Solution

  1. Step 1: Choose attribute for numeric range

    [ValidateRange(1024,65535)] ensures the integer is within the port number range.
  2. Step 2: Ensure parameter is not empty

    [ValidateNotNullOrEmpty()] prevents null or empty input.
  3. Step 3: Combine both for full validation

    Using both attributes together enforces the correct range and non-empty input.
  4. Final Answer:

    [ValidateRange(1024,65535)][ValidateNotNullOrEmpty()] -> Option A
  5. Quick Check:

    Range + NotNullOrEmpty = correct port validation [OK]
Hint: Combine ValidateRange and ValidateNotNullOrEmpty for numeric required input [OK]
Common Mistakes:
  • Using ValidateSet for numeric ranges
  • Relying on ValidatePattern for numeric range checks
  • Missing non-empty validation