Public/New-DynamicParam.ps1
Function New-DynamicParam { [CmdletBinding()] param( [string]$Name, [string[]]$Options, [switch]$Mandatory, [string]$SetName='__AllParameterSets', [int]$Position, [switch]$ValueFromPipelineByPropertyName, [string]$HelpMessage ) #param attributes $ParamAttr = New-Object -TypeName System.Management.Automation.ParameterAttribute $ParamAttr.ParameterSetName = $SetName if($Mandatory){ $ParamAttr.Mandatory = $True } if($Position -ne $null){ $ParamAttr.Position=$Position } if($ValueFromPipelineByPropertyName){ $ParamAttr.ValueFromPipelineByPropertyName = $True } if($HelpMessage){ $ParamAttr.HelpMessage = $HelpMessage } ##param validation set $ParamOptions = New-Object -TypeName System.Management.Automation.ValidateSetAttribute -ArgumentList $options $AttributeCollection = New-Object -TypeName 'Collections.ObjectModel.Collection[System.Attribute]' $AttributeCollection.Add($ParamAttr) $AttributeCollection.Add($ParamOptions) $Parameter = New-Object -TypeName System.Management.Automation.RuntimeDefinedParameter -ArgumentList @($Name, [string], $AttributeCollection) $Dictionary = New-Object -TypeName System.Management.Automation.RuntimeDefinedParameterDictionary $Dictionary.Add($Name, $Parameter) $Dictionary } |