RuntimeDefinedParameter の AttributeCollection に System.ComponentModel.DefaultValueAttribute を追加しようとしたのですが、うまくいきません。
7 に答える
Bartek が提案したように、以下のコードに示すように Value プロパティを使用できます。
DynamicParam {
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
$colorlist = [System.Enum]::GetNames([System.Drawing.KnownColor])
$attributes = New-Object System.Management.Automation.ParameterAttribute
$attributes.ParameterSetName = "__AllParameterSets"
$attributes.Mandatory = $false
# Background color
$validationset = New-Object -Type System.Management.Automation.ValidateSetAttribute -ArgumentList $colorlist
$collection = New-Object -Type System.Collections.ObjectModel.Collection[System.Attribute]
$collection.Add($attributes)
$collection.Add($validationset)
$background = New-Object -Type System.Management.Automation.RuntimeDefinedParameter("Background", [String], $collection)
$background.Value = "Transparent"
$newparams = New-Object System.Management.Automation.RuntimeDefinedParameterDictionary
$newparams.Add("Background", $background)
return $newparams
}
ここで重要な行は $background.Value = "Transparent" で、$background は RunTimeDefinedParameter です。
興味のある方へ。最初に属性として使用しようとしましたが、ParameterAttributes 内で使用できる .Value がありません。
System.Management.Automation.RuntimeDefinedParameter には「Value」プロパティがあるため、それを使用してデフォルト値を設定すると思います。それはある程度機能します(スクリプトをデバッグすると、 $PSCmdlet.GetDynamicParameters() を使用してこの「デフォルト」値を確認できます)が、実際の関数でアクセスできませんでした( $pscmdlet.GetDynamicParameters() 呼び出しで実行が「停止」しました) .
とにかく:値を指定すると、関数はデフォルト値ではなくバインドされた値を表示していました。
それが役立つかどうかはわかりません.TBHパラメータが動的な場合、デフォルト値のユースケースはほとんど見られません. 必要な理由を知りたいです。:)