Using Default Parameter Values

by Jan 5, 2018

You may have heard about PowerShell default parameter values and $PSDefaultParameterValues. When you assign a hash table to this special variable, the key defines the commands and parameters affected, and the value defines your new default value.

Take a look at this example:

$PSDefaultParameterValues = @{
    '*:ComputerName' = 'testserver1'
}

This would set the -ComputerName parameter for all commands (“*”) to the new default value “testserver1”. Whenever you call a command that (a) has a parameter named “ComputerName” and (b) you did not explicitly assign a value to this parameter, your default value will be used.

This also works for PowerShell functions, however only for “Advanced Functions”. “Simple Functions” do not qualify.

Check yourself, and define $PSDefaultParameterValues like above. Next, run this code:

function testSimple
{ 
    param($Computername) 
    
    "Result Simple: $Computername" 
}

function testAdvanced
{ 
    [CmdletBinding()]
    param($Computername) 
    
    "Result Advanced: $Computername" 
}




testSimple

testAdvanced

As you will see, only testAdvanced picks up the default parameter. “Advanced Functions” are defined by using at least one parameter attribute, such as [CmdletBinding()] or [Parameter(Mandatory)].

Twitter This Tip! ReTweet this Tip!