PowerShell Dynamic Parameters
“Simple” dynamic parameter
Section titled ““Simple” dynamic parameter”This example adds a new parameter to MyTestFunction if $SomeUsefulNumber is greater than 5.
function MyTestFunction{ [CmdletBinding(DefaultParameterSetName='DefaultConfiguration')] Param ( [Parameter(Mandatory=$true)][int]$SomeUsefulNumber )
DynamicParam { $paramDictionary = New-Object -Type System.Management.Automation.RuntimeDefinedParameterDictionary $attributes = New-Object System.Management.Automation.ParameterAttribute $attributes.ParameterSetName = "__AllParameterSets" $attributes.Mandatory = $true $attributeCollection = New-Object -Type System.Collections.ObjectModel.Collection[System.Attribute] $attributeCollection.Add($attributes) # If "SomeUsefulNumber" is greater than 5, then add the "MandatoryParam1" parameter if($SomeUsefulNumber -gt 5) { # Create a mandatory string parameter called "MandatoryParam1" $dynParam1 = New-Object -Type System.Management.Automation.RuntimeDefinedParameter("MandatoryParam1", [String], $attributeCollection) # Add the new parameter to the dictionary $paramDictionary.Add("MandatoryParam1", $dynParam1) } return $paramDictionary }
process { Write-Host "SomeUsefulNumber = $SomeUsefulNumber" # Notice that dynamic parameters need a specific syntax Write-Host ("MandatoryParam1 = {0}" -f $PSBoundParameters.MandatoryParam1) }
}Usage:
PS > MyTestFunction -SomeUsefulNumber 3SomeUsefulNumber = 3MandatoryParam1 =
PS > MyTestFunction -SomeUsefulNumber 6cmdlet MyTestFunction at command pipeline position 1Supply values for the following parameters:MandatoryParam1:
PS >MyTestFunction -SomeUsefulNumber 6 -MandatoryParam1 testSomeUsefulNumber = 6MandatoryParam1 = testIn the second usage example, you can clearly see that a parameter is missing.
Dynamic parameters are also taken into account with auto completion.
Here’s what happens if you hit ctrl + space at the end of the line:
PS >MyTestFunction -SomeUsefulNumber 3 -<ctrl+space>Verbose WarningAction WarningVariable OutBufferDebug InformationAction InformationVariable PipelineVariableErrorAction ErrorVariable OutVariable
PS >MyTestFunction -SomeUsefulNumber 6 -<ctrl+space>MandatoryParam1 ErrorAction ErrorVariable OutVariableVerbose WarningAction WarningVariable OutBufferDebug InformationAction InformationVariable PipelineVariable