Josh Earl
Josh Earl

Reputation: 18351

Is it possible to force PowerShell script to throw if a required parameter is omitted?

I would like the second function call in this script to throw an error:

function Deploy
{

param(

    [Parameter(Mandatory=$true)]
    [ValidateNotNullOrEmpty()]
    [string]$BuildName

    )
    Write-Host "Build name is: $BuildName"

}

Deploy "Build123"

Deploy #Currently prompts for input

Prompting is great for using the script interactively, but this will also be executed by our build server.

Is my best bet just doing some custom validation with an if or something?

Upvotes: 46

Views: 27387

Answers (2)

ohw
ohw

Reputation: 1639

@Emperor XLII has a nice comment in the question that I think can be a better answer for some use cases:

if you run powershell.exe with the -NonInteractive flag, missing mandatory parameters will cause an error and result in a non-zero exit code for the process.

The reasons to use this can be:

  1. You have a lot of such Mandatory=$true parameters and the cost is high to convert all of them.
  2. The script will be used both interactively and non-interactively, and when run interactively you do want to be prompted for missing parameters.

Upvotes: 36

Shay Levy
Shay Levy

Reputation: 126722

Once the parameter is marked as mandatory PowerShell will prompt for value. That said, if you remove the mandatory attribute then you can set a default value with a throw statement:

function Deploy
{
    param(
        [Parameter()]
        [ValidateNotNullOrEmpty()]
        [string]$BuildName=$(throw "BuildName is mandatory, please provide a value.")
    )

    Write-Host "Build name is: $BuildName"
}

Upvotes: 61

Related Questions