Private/ScriptBlocks/ScriptBlock_DefaultDynamicParamProcess.ps1
<#
.DESCRIPTION This script block should be called within the Process block of all scripts that use the New-DynamicParameter function. It will apply the "DefaultValue" parameter to the dynamic parameter. It will create variables that can be used within the script from the dynamic parameters. .EXAMPLE & $ScriptBlock_DefaultDynamicParamProcess -ScriptPsBoundParameters:($PsBoundParameters) -ScriptPSCmdlet:($PSCmdlet) -DynamicParams:($RuntimeParameterDictionary) .EXAMPLE Invoke-Command -ScriptBlock:($ScriptBlock_DefaultDynamicParamProcess) -ArgumentList:($PsBoundParameters,$PSCmdlet,$RuntimeParameterDictionary) -NoNewScope #> $ScriptBlock_DefaultDynamicParamProcess = { Param( [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 0)]$ScriptPsBoundParameters , [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 1)][ValidateNotNullOrEmpty()]$ScriptPSCmdlet , [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, Position = 2)][ValidateNotNullOrEmpty()]$DynamicParams ) # For DynamicParam with a default value set that value $DynamicParams.Values | Where-Object { $_.IsSet -and ($ScriptPSCmdlet.ParameterSetName -in $_.Attributes.ParameterSetName -or '__AllParameterSets' -in $_.Attributes.ParameterSetName) } | ForEach-Object { If (-not ([System.String]::IsNullOrEmpty($_.Value))) { $ScriptPsBoundParameters[$_.Name] = $_.Value } } # Convert the DynamicParam inputs into new variables for the script to use $ScriptPsBoundParameters.GetEnumerator() | ForEach-Object { If (-not ([System.String]::IsNullOrEmpty($_.Value))) { Set-Variable -Name:($_.Key) -Value:($_.Value) -Force } } } |