public/New-DynamicParameter.ps1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
function New-DynamicParameter() { Param( [Parameter(Position = 0, Mandatory = $true, ValueFromPipelineByPropertyName)] [String] $Name, [Parameter(Position = 1, ValueFromPipelineByPropertyName)] [Type] $Type, [Parameter(Position = 2, ValueFromPipelineByPropertyName)] [Nullable[int]] $Position, [Parameter(ValueFromPipelineByPropertyName)] [switch] $FromPipeline, [Parameter(ValueFromPipelineByPropertyName)] [switch] $FromPipelineProperty, [Parameter(ValueFromPipelineByPropertyName)] [switch] $Mandatory, [Parameter(ValueFromPipelineByPropertyName)] [String] $HelpMessage, [Parameter(ValueFromPipelineByPropertyName)] [String[]] $Set = $null, [Parameter(ValueFromPipelineByPropertyName)] [scriptblock] $GetData = $null, [Parameter(ValueFromPipelineByPropertyName)] [String[]] $Aliases = $null, [Parameter(ValueFromPipelineByPropertyName)] [System.Attribute[]] $Attributes ) if($null -eq $Type) { $Type = [String]; } $attrs = New-Object System.Collections.ObjectModel.Collection[System.Attribute] $parameterAttr = New-Object System.Management.Automation.ParameterAttribute if($Position.HasValue) { $parameterAttr.Position = $Position.Value } $parameterAttr.ValueFromPipeline = $FromPipeline.ToBool() $parameterAttr.ValueFromPipelineByPropertyName = $FromPipelineProperty.ToBool() if(![string]::IsNullOrWhiteSpace($HelpMessage)) { $parameterAttr.HelpMessage = $HelpMessage } $parameterAttr.Mandatory = $Mandatory.ToBool() $attrs.Add($parameterAttr) if($Aliases -and $Aliases.Length) { $next = New-Object System.Management.Automation.AliasAttribute($Aliases) $attrs.Add($next) } if($GetData) { $Set = & $GetData } if($Set -and $Set.Length) { $next = New-Object System.Management.Automation.ValidateSetAttribute($Set); $attrs.Add($next); } if($attributes -and $attributes.Length) { foreach($attr in $attributes) { $attrs.Add($attr) } } $parameter = New-Object System.Management.Automation.RuntimeDefinedParameter($Name, $Type, $attrs) return $parameter } |