Bird
Raised Fist0
PowerShellscripting~20 mins

Parameter attributes (Mandatory, ValidateSet) in PowerShell - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Parameter Attributes Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
Output of a script with Mandatory and ValidateSet attributes
What will be the output when running this PowerShell script without any parameters?
PowerShell
function Test-Param {
  param(
    [Parameter(Mandatory=$true)]
    [ValidateSet('Red','Green','Blue')]
    [string]$Color
  )
  "Selected color is $Color"
}

Test-Param
ASelected color is Green
BError: The value provided is not in the ValidateSet.
CYou must provide a value for the mandatory parameter 'Color'.
DSelected color is Red
Attempts:
2 left
💡 Hint
Think about what happens when a mandatory parameter is not provided.
💻 Command Output
intermediate
2:00remaining
Output when passing invalid value to ValidateSet parameter
What happens when you run this script with the parameter value 'Yellow'?
PowerShell
function Test-Param {
  param(
    [Parameter(Mandatory=$true)]
    [ValidateSet('Red','Green','Blue')]
    [string]$Color
  )
  "Selected color is $Color"
}

Test-Param -Color Yellow
ASelected color is Yellow
BError: Cannot validate argument on parameter 'Color'. The argument 'Yellow' does not belong to the set 'Red,Green,Blue'.
CSelected color is Red
DNo output, script runs silently
Attempts:
2 left
💡 Hint
Check what ValidateSet does when an invalid value is passed.
📝 Syntax
advanced
2:00remaining
Identify the correct syntax for Mandatory and ValidateSet attributes
Which option correctly declares a parameter named 'Mode' that is mandatory and accepts only 'Auto', 'Manual', or 'Off'?
A[Parameter(Mandatory=$true)][ValidateSet('Auto','Manual','Off')][string]$Mode
B[ValidateSet('Auto','Manual','Off')][Parameter(Mandatory=$true)][string]$Mode
CedoM$]gnirts[])'ffO','launaM','otuA'(teSetadilaV[])eurt$=yrotadnaM(retemaraP[
D[Parameter(Mandatory=$false)][ValidateSet('Auto','Manual','Off')][string]$Mode
Attempts:
2 left
💡 Hint
Mandatory attribute requires explicit assignment to $true or $false.
🚀 Application
advanced
2:00remaining
Determine the output of a script using Mandatory and ValidateSet with default value
What will be the output of this script when run without parameters?
PowerShell
function Test-Param {
  param(
    [Parameter(Mandatory=$true)]
    [ValidateSet('Small','Medium','Large')]
    [string]$Size = 'Medium'
  )
  "Selected size is $Size"
}

Test-Param
ASelected size is Medium
BError: Default value not allowed with Mandatory parameter.
CSelected size is Small
DYou must provide a value for the mandatory parameter 'Size'.
Attempts:
2 left
💡 Hint
Consider how Mandatory and default values interact.
🧠 Conceptual
expert
2:00remaining
Understanding behavior of Mandatory and ValidateSet in pipeline input
Given this function, what will be the output when piping the string 'Green' to it?
PowerShell
function Test-Param {
  param(
    [Parameter(Mandatory=$true, ValueFromPipeline=$true)]
    [ValidateSet('Red','Green','Blue')]
    [string]$Color
  )
  process {
    "Selected color is $Color"
  }
}

'Green' | Test-Param
ASelected color is Green
BYou must provide a value for the mandatory parameter 'Color'.
CError: Cannot validate argument on parameter 'Color'. The argument 'Green' does not belong to the set.
DNo output
Attempts:
2 left
💡 Hint
Think about how pipeline input works with ValidateSet and Mandatory.

Practice

(1/5)
1. What does the [Parameter(Mandatory=$true)] attribute do in a PowerShell script parameter?
easy
A. It limits the parameter to specific allowed values.
B. It sets a default value for the parameter.
C. It makes the parameter optional.
D. It makes the parameter required when running the script.

Solution

  1. Step 1: Understand the Mandatory attribute

    The Mandatory=$true setting means the parameter must be provided by the user when running the script.
  2. Step 2: Differentiate from other attributes

    Unlike ValidateSet, which restricts values, Mandatory only requires the parameter to be present.
  3. Final Answer:

    It makes the parameter required when running the script. -> Option D
  4. Quick Check:

    Mandatory = required parameter [OK]
Hint: Mandatory means you must provide the parameter value [OK]
Common Mistakes:
  • Confusing Mandatory with ValidateSet
  • Thinking Mandatory sets default values
  • Assuming Mandatory makes parameter optional
2. Which of the following is the correct syntax to restrict a mandatory parameter to only accept the values 'Red', 'Green', or 'Blue' in PowerShell?
easy
A. [Parameter(Mandatory=$true)][ValidateSet('Red','Green','Blue')]$Color
B. [ValidateSet('Red','Green','Blue')][Parameter()]$Color
C. [Parameter()][ValidateSet('Red','Green','Blue')]$Color
D. [ValidateSet('Red','Green','Blue')]$Color

Solution

  1. Step 1: Check attribute order and syntax

    Both Parameter and ValidateSet attributes can be used together. The order does not affect functionality, but the common style is to put Parameter first.
  2. Step 2: Confirm Mandatory and ValidateSet usage

    [Parameter(Mandatory=$true)][ValidateSet('Red','Green','Blue')]$Color correctly uses Mandatory=$true and ValidateSet with the allowed values.
  3. Final Answer:

    [Parameter(Mandatory=$true)][ValidateSet('Red','Green','Blue')]$Color -> Option A
  4. Quick Check:

    Correct syntax = [Parameter(Mandatory=$true)][ValidateSet('Red','Green','Blue')]$Color [OK]
Hint: Use [Parameter()] before [ValidateSet()] for clarity [OK]
Common Mistakes:
  • Swapping attribute order causing confusion
  • Missing parentheses in ValidateSet
  • Not setting Mandatory when required
3. Given the script snippet:
function Test-Color {
  param(
    [Parameter(Mandatory=$true)]
    [ValidateSet('Red','Green','Blue')]
    [string]$Color
  )
  Write-Output "Color chosen: $Color"
}

Test-Color -Color Yellow

What will happen when you run this script?
medium
A. It prompts the user to enter a valid color.
B. It outputs: Color chosen: Yellow
C. It throws a validation error because 'Yellow' is not in the ValidateSet.
D. It runs without error but ignores the color value.

Solution

  1. Step 1: Understand ValidateSet behavior

    The ValidateSet attribute restricts input to the listed values only. 'Yellow' is not in the set 'Red', 'Green', 'Blue'.
  2. Step 2: Predict script behavior on invalid input

    Passing 'Yellow' causes a validation error and stops the script before output.
  3. Final Answer:

    It throws a validation error because 'Yellow' is not in the ValidateSet. -> Option C
  4. Quick Check:

    ValidateSet blocks invalid values [OK]
Hint: ValidateSet blocks values not listed [OK]
Common Mistakes:
  • Assuming script prompts instead of erroring
  • Thinking it ignores invalid values
  • Confusing Mandatory with ValidateSet behavior
4. You wrote this parameter declaration:
param(
  [Parameter(Mandatory=$true)]
  [ValidateSet('Small','Medium','Large')]
  [string]$Size
)

But when running the script without the -Size argument, it does not prompt for input and continues silently. What is the likely cause?
medium
A. The parameter type should be [int] instead of [string].
B. The script is missing CmdletBinding() to enable parameter validation.
C. Mandatory parameters never prompt for input automatically.
D. The ValidateSet attribute is incorrect and disables Mandatory.

Solution

  1. Step 1: Understand Mandatory prompt behavior

    Mandatory parameters prompt for input only if the function or script uses CmdletBinding() or is an advanced function.
  2. Step 2: Identify missing CmdletBinding()

    Without CmdletBinding(), the script treats parameters as simple variables and does not enforce Mandatory prompts.
  3. Final Answer:

    The script is missing CmdletBinding() to enable parameter validation. -> Option B
  4. Quick Check:

    CmdletBinding() enables Mandatory prompts [OK]
Hint: Add CmdletBinding() to enable Mandatory prompts [OK]
Common Mistakes:
  • Thinking ValidateSet disables Mandatory
  • Assuming Mandatory never prompts
  • Changing parameter type unnecessarily
5. You want to create a script parameter that is required and only accepts the values 'Start', 'Stop', or 'Restart'. Which of the following parameter declarations correctly enforces both requirements and will prompt the user if the parameter is missing?
hard
A. [CmdletBinding()] param( [Parameter(Mandatory=$true)] [ValidateSet('Start','Stop','Restart')] [string]$Action )
B. param( [Parameter()] [ValidateSet('Start','Stop','Restart')] [string]$Action = 'Start' )
C. [CmdletBinding()] param( [Parameter()] [ValidateSet('Start','Stop','Restart')] [string]$Action )
D. param( [Parameter(Mandatory=$true)] [string]$Action )

Solution

  1. Step 1: Ensure Mandatory prompts user

    To prompt the user when a parameter is missing, the script must use CmdletBinding() and set Mandatory=$true.
  2. Step 2: Restrict values with ValidateSet

    Using ValidateSet limits input to the allowed values 'Start', 'Stop', or 'Restart'.
  3. Step 3: Check all options

    [CmdletBinding()] param( [Parameter(Mandatory=$true)] [ValidateSet('Start','Stop','Restart')] [string]$Action ) includes CmdletBinding(), Mandatory=$true, and ValidateSet, fulfilling all requirements.
  4. Final Answer:

    [CmdletBinding()] param( [Parameter(Mandatory=$true)] [ValidateSet('Start','Stop','Restart')] [string]$Action ) -> Option A
  5. Quick Check:

    CmdletBinding + Mandatory + ValidateSet = [CmdletBinding()] param( [Parameter(Mandatory=$true)] [ValidateSet('Start','Stop','Restart')] [string]$Action ) [OK]
Hint: Use CmdletBinding with Mandatory and ValidateSet together [OK]
Common Mistakes:
  • Omitting CmdletBinding() so no prompt occurs
  • Setting default value disables Mandatory prompt
  • Not using ValidateSet to restrict values
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard